* [PATCH 0/3] add [ as alias for test, fix 0/1 argument handling
@ 2026-03-11 12:09 Rasmus Villemoes
2026-03-11 12:09 ` [PATCH 1/3] cmd: test: allow using [ as alias for test Rasmus Villemoes
` (2 more replies)
0 siblings, 3 replies; 12+ messages in thread
From: Rasmus Villemoes @ 2026-03-11 12:09 UTC (permalink / raw)
To: u-boot; +Cc: Tom Rini, Rasmus Villemoes
Make 'test' behave a little more like its cousins in other shells, by
allowing the [ ... ] spelling, and while here, fix up the handling of
a single, non-empty argument to comply with POSIX.
Rasmus Villemoes (3):
cmd: test: allow using [ as alias for test
test: add tests for left-bracket alias for 'test' command
cmd: test: fix handling of single-argument form of test
cmd/test.c | 30 +++++++++++++++++++++++--
test/hush/if.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 89 insertions(+), 2 deletions(-)
--
2.53.0
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/3] cmd: test: allow using [ as alias for test
2026-03-11 12:09 [PATCH 0/3] add [ as alias for test, fix 0/1 argument handling Rasmus Villemoes
@ 2026-03-11 12:09 ` Rasmus Villemoes
2026-03-11 13:08 ` Quentin Schulz
2026-03-11 12:09 ` [PATCH 2/3] test: add tests for left-bracket alias for 'test' command Rasmus Villemoes
2026-03-11 12:09 ` [PATCH 3/3] cmd: test: fix handling of single-argument form of test Rasmus Villemoes
2 siblings, 1 reply; 12+ messages in thread
From: Rasmus Villemoes @ 2026-03-11 12:09 UTC (permalink / raw)
To: u-boot; +Cc: Tom Rini, Rasmus Villemoes
I often find myself writing something like
if [ "$somevar" = 123 ] ; then ...
only to realize that that syntax doesn't work in U-Boot shell, and
must be spelled
if test "$somevar" = 123 ; then
It only takes a few lines of code to support this POSIX-standardized
alias for test, and helps developers focus on their actual problems
instead of dealing with such unexpected quirks of the shell.
Signed-off-by: Rasmus Villemoes <ravi@prevas.dk>
---
cmd/test.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/cmd/test.c b/cmd/test.c
index a9ac07e6143..f0645ef98f1 100644
--- a/cmd/test.c
+++ b/cmd/test.c
@@ -63,6 +63,14 @@ static int do_test(struct cmd_tbl *cmdtp, int flag, int argc,
char * const *ap;
int i, op, left, adv, expr, last_expr, last_unop, last_binop;
+ if (!strcmp(argv[0], "[")) {
+ if (strcmp(argv[argc - 1], "]")) {
+ printf("[: missing terminating ]\n");
+ return 1;
+ }
+ argc--;
+ }
+
/* args? */
if (argc < 3)
return 1;
@@ -212,6 +220,17 @@ U_BOOT_CMD(
"[args..]"
);
+/*
+ * This does not use the U_BOOT_CMD macro as [ can't be used in symbol names
+ */
+ll_entry_declare(struct cmd_tbl, lbracket, cmd) = {
+ "[", CONFIG_SYS_MAXARGS, cmd_always_repeatable, do_test,
+ "alias for 'test'",
+#ifdef CONFIG_SYS_LONGHELP
+ " <test expression> ]"
+#endif /* CONFIG_SYS_LONGHELP */
+};
+
static int do_false(struct cmd_tbl *cmdtp, int flag, int argc,
char *const argv[])
{
--
2.53.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/3] test: add tests for left-bracket alias for 'test' command
2026-03-11 12:09 [PATCH 0/3] add [ as alias for test, fix 0/1 argument handling Rasmus Villemoes
2026-03-11 12:09 ` [PATCH 1/3] cmd: test: allow using [ as alias for test Rasmus Villemoes
@ 2026-03-11 12:09 ` Rasmus Villemoes
2026-03-16 2:43 ` Simon Glass
2026-03-11 12:09 ` [PATCH 3/3] cmd: test: fix handling of single-argument form of test Rasmus Villemoes
2 siblings, 1 reply; 12+ messages in thread
From: Rasmus Villemoes @ 2026-03-11 12:09 UTC (permalink / raw)
To: u-boot; +Cc: Tom Rini, Rasmus Villemoes
Duplicate a few of the existing test cases, using the [ spelling, and
also ensure that the presence of a matching ] as a separate and last
argument is enforced.
Signed-off-by: Rasmus Villemoes <ravi@prevas.dk>
---
test/hush/if.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/test/hush/if.c b/test/hush/if.c
index ea615b246a9..148e9a53e90 100644
--- a/test/hush/if.c
+++ b/test/hush/if.c
@@ -315,3 +315,34 @@ static int hush_test_if_z_operator(struct unit_test_state *uts)
return 0;
}
HUSH_TEST(hush_test_if_z_operator, 0);
+
+static int hush_test_lbracket_alias(struct unit_test_state *uts)
+{
+ char if_formatted[128];
+ const char *missing_rbracket_error = "[: missing terminating ]";
+
+ sprintf(if_formatted, if_format, "[ aaa = aaa ]");
+ ut_assertok(run_command(if_formatted, 0));
+
+ sprintf(if_formatted, if_format, "[ aaa = bbb ]");
+ ut_asserteq(1, run_command(if_formatted, 0));
+
+ sprintf(if_formatted, if_format, "[ aaa = aaa");
+ ut_asserteq(1, run_command(if_formatted, 0));
+ ut_assert_nextline(missing_rbracket_error);
+
+ sprintf(if_formatted, if_format, "[ aaa = bbb");
+ ut_asserteq(1, run_command(if_formatted, 0));
+ ut_assert_nextline(missing_rbracket_error);
+
+ sprintf(if_formatted, if_format, "[ aaa = aaa]");
+ ut_asserteq(1, run_command(if_formatted, 0));
+ ut_assert_nextline(missing_rbracket_error);
+
+ sprintf(if_formatted, if_format, "[ aaa = bbb]");
+ ut_asserteq(1, run_command(if_formatted, 0));
+ ut_assert_nextline(missing_rbracket_error);
+
+ return 0;
+}
+HUSH_TEST(hush_test_lbracket_alias, UTF_CONSOLE);
--
2.53.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/3] cmd: test: fix handling of single-argument form of test
2026-03-11 12:09 [PATCH 0/3] add [ as alias for test, fix 0/1 argument handling Rasmus Villemoes
2026-03-11 12:09 ` [PATCH 1/3] cmd: test: allow using [ as alias for test Rasmus Villemoes
2026-03-11 12:09 ` [PATCH 2/3] test: add tests for left-bracket alias for 'test' command Rasmus Villemoes
@ 2026-03-11 12:09 ` Rasmus Villemoes
2026-03-16 2:43 ` Simon Glass
2 siblings, 1 reply; 12+ messages in thread
From: Rasmus Villemoes @ 2026-03-11 12:09 UTC (permalink / raw)
To: u-boot; +Cc: Tom Rini, Rasmus Villemoes
POSIX states that
0 arguments:
Exit false (1).
1 argument:
Exit true (0) if $1 is not null; otherwise, exit false.
and at least bash and busybox sh behave that way.
The current 'argc < 3' does the right thing for a non-existing or
empty argv[1], but not for a non-empty argv[1]. Fix that and add
corresponding test cases.
Signed-off-by: Rasmus Villemoes <ravi@prevas.dk>
---
cmd/test.c | 11 +++++++++--
test/hush/if.c | 30 ++++++++++++++++++++++++++++++
2 files changed, 39 insertions(+), 2 deletions(-)
diff --git a/cmd/test.c b/cmd/test.c
index f0645ef98f1..0d0f090386c 100644
--- a/cmd/test.c
+++ b/cmd/test.c
@@ -71,10 +71,17 @@ static int do_test(struct cmd_tbl *cmdtp, int flag, int argc,
argc--;
}
- /* args? */
- if (argc < 3)
+ /*
+ * Per POSIX, 'test' with 0 arguments should return 1, while
+ * 'test <arg>' should be equivalent to 'test -n <arg>',
+ * i.e. true if and only if <arg> is not empty.
+ */
+ if (argc < 2)
return 1;
+ if (argc == 2)
+ return !strcmp(argv[1], "");
+
#ifdef DEBUG
{
debug("test(%d):", argc);
diff --git a/test/hush/if.c b/test/hush/if.c
index 148e9a53e90..e82a95aaf27 100644
--- a/test/hush/if.c
+++ b/test/hush/if.c
@@ -32,6 +32,15 @@ static int hush_test_if_base(struct unit_test_state *uts)
sprintf(if_formatted, if_format, "false");
ut_asserteq(1, run_command(if_formatted, 0));
+ sprintf(if_formatted, if_format, "test");
+ ut_asserteq(1, run_command(if_formatted, 0));
+
+ sprintf(if_formatted, if_format, "test ''");
+ ut_asserteq(1, run_command(if_formatted, 0));
+
+ sprintf(if_formatted, if_format, "test 'abc'");
+ ut_assertok(run_command(if_formatted, 0));
+
return 0;
}
HUSH_TEST(hush_test_if_base, 0);
@@ -343,6 +352,27 @@ static int hush_test_lbracket_alias(struct unit_test_state *uts)
ut_asserteq(1, run_command(if_formatted, 0));
ut_assert_nextline(missing_rbracket_error);
+ sprintf(if_formatted, if_format, "[ ]");
+ ut_asserteq(1, run_command(if_formatted, 0));
+
+ sprintf(if_formatted, if_format, "[");
+ ut_asserteq(1, run_command(if_formatted, 0));
+ ut_assert_nextline(missing_rbracket_error);
+
+ sprintf(if_formatted, if_format, "[ '' ]");
+ ut_asserteq(1, run_command(if_formatted, 0));
+
+ sprintf(if_formatted, if_format, "[ ''");
+ ut_asserteq(1, run_command(if_formatted, 0));
+ ut_assert_nextline(missing_rbracket_error);
+
+ sprintf(if_formatted, if_format, "[ 'abc' ]");
+ ut_assertok(run_command(if_formatted, 0));
+
+ sprintf(if_formatted, if_format, "[ 'abc'");
+ ut_asserteq(1, run_command(if_formatted, 0));
+ ut_assert_nextline(missing_rbracket_error);
+
return 0;
}
HUSH_TEST(hush_test_lbracket_alias, UTF_CONSOLE);
--
2.53.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] cmd: test: allow using [ as alias for test
2026-03-11 12:09 ` [PATCH 1/3] cmd: test: allow using [ as alias for test Rasmus Villemoes
@ 2026-03-11 13:08 ` Quentin Schulz
2026-03-11 13:25 ` Rasmus Villemoes
0 siblings, 1 reply; 12+ messages in thread
From: Quentin Schulz @ 2026-03-11 13:08 UTC (permalink / raw)
To: Rasmus Villemoes, u-boot; +Cc: Tom Rini
Hi Rasmus,
On 3/11/26 1:09 PM, Rasmus Villemoes wrote:
> I often find myself writing something like
>
> if [ "$somevar" = 123 ] ; then ...
>
> only to realize that that syntax doesn't work in U-Boot shell, and
> must be spelled
>
> if test "$somevar" = 123 ; then
>
> It only takes a few lines of code to support this POSIX-standardized
> alias for test, and helps developers focus on their actual problems
> instead of dealing with such unexpected quirks of the shell.
>
> Signed-off-by: Rasmus Villemoes <ravi@prevas.dk>
> ---
> cmd/test.c | 19 +++++++++++++++++++
Please don't forget to update the docs. It still states "Unlike in
ordinary shells, it cannot be spelled [.", c.f.
https://docs.u-boot.org/en/latest/usage/cmd/test.html#description. The
synopsis should also have a few examples using the new syntax.
Another question is if you have thought about/tested multi-expressions?
e.g.
[ aaa = aaa -a bbb = bbb ]
and possibly also
[ ! aaa = aaa ]
which I'm assuming should be equivalent to [ aaa != aaa ] (of course
this test doesn't make much sense, but there seems to be support for the
-e operator for checking file existence). I think adding tests for those
would be nice too?
Cheers,
Quentin
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] cmd: test: allow using [ as alias for test
2026-03-11 13:08 ` Quentin Schulz
@ 2026-03-11 13:25 ` Rasmus Villemoes
0 siblings, 0 replies; 12+ messages in thread
From: Rasmus Villemoes @ 2026-03-11 13:25 UTC (permalink / raw)
To: Quentin Schulz; +Cc: u-boot, Tom Rini
On Wed, Mar 11 2026, Quentin Schulz <quentin.schulz@cherry.de> wrote:
> Hi Rasmus,
>
> On 3/11/26 1:09 PM, Rasmus Villemoes wrote:
>> I often find myself writing something like
>> if [ "$somevar" = 123 ] ; then ...
>> only to realize that that syntax doesn't work in U-Boot shell, and
>> must be spelled
>> if test "$somevar" = 123 ; then
>> It only takes a few lines of code to support this POSIX-standardized
>> alias for test, and helps developers focus on their actual problems
>> instead of dealing with such unexpected quirks of the shell.
>> Signed-off-by: Rasmus Villemoes <ravi@prevas.dk>
>> ---
>> cmd/test.c | 19 +++++++++++++++++++
>
> Please don't forget to update the docs. It still states "Unlike in
> ordinary shells, it cannot be spelled [.",
> c.f. https://docs.u-boot.org/en/latest/usage/cmd/test.html#description. The
> synopsis should also have a few examples using the new syntax.
Ah, yes, thanks. Rather amazing that I could complete forget having
written that only 10 months ago...
Will update.
> Another question is if you have thought about/tested multi-expressions?
>
> e.g.
>
> [ aaa = aaa -a bbb = bbb ]
>
> and possibly also
>
> [ ! aaa = aaa ]
>
Yes, I did think about those, and I can certainly copy-paste a few more
test cases and spell them using [], but as the implementation is so
simple (check last argv, decrement argc) I couldn't really imagine those
being any different than the simple cases.
> I think adding tests for those would be nice too?
Sure, will do.
Rasmus
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] test: add tests for left-bracket alias for 'test' command
2026-03-11 12:09 ` [PATCH 2/3] test: add tests for left-bracket alias for 'test' command Rasmus Villemoes
@ 2026-03-16 2:43 ` Simon Glass
2026-03-16 8:16 ` Rasmus Villemoes
0 siblings, 1 reply; 12+ messages in thread
From: Simon Glass @ 2026-03-16 2:43 UTC (permalink / raw)
To: Rasmus Villemoes; +Cc: u-boot, Tom Rini
Hi Rasmus,
On Wed, 11 Mar 2026 at 06:09, Rasmus Villemoes <ravi@prevas.dk> wrote:
>
> Duplicate a few of the existing test cases, using the [ spelling, and
> also ensure that the presence of a matching ] as a separate and last
> argument is enforced.
>
> Signed-off-by: Rasmus Villemoes <ravi@prevas.dk>
> ---
> test/hush/if.c | 31 +++++++++++++++++++++++++++++++
> 1 file changed, 31 insertions(+)
>
> diff --git a/test/hush/if.c b/test/hush/if.c
> index ea615b246a9..148e9a53e90 100644
> --- a/test/hush/if.c
> +++ b/test/hush/if.c
> @@ -315,3 +315,34 @@ static int hush_test_if_z_operator(struct unit_test_state *uts)
> return 0;
> }
> HUSH_TEST(hush_test_if_z_operator, 0);
> +
> +static int hush_test_lbracket_alias(struct unit_test_state *uts)
> +{
> + char if_formatted[128];
> + const char *missing_rbracket_error = "[: missing terminating ]";
> +
> + sprintf(if_formatted, if_format, "[ aaa = aaa ]");
> + ut_assertok(run_command(if_formatted, 0));
How about using run_commandf() so you can do this in one line? Looks
good apart from that.
> +
> + sprintf(if_formatted, if_format, "[ aaa = bbb ]");
> + ut_asserteq(1, run_command(if_formatted, 0));
> +
> + sprintf(if_formatted, if_format, "[ aaa = aaa");
> + ut_asserteq(1, run_command(if_formatted, 0));
> + ut_assert_nextline(missing_rbracket_error);
> +
> + sprintf(if_formatted, if_format, "[ aaa = bbb");
> + ut_asserteq(1, run_command(if_formatted, 0));
> + ut_assert_nextline(missing_rbracket_error);
> +
> + sprintf(if_formatted, if_format, "[ aaa = aaa]");
> + ut_asserteq(1, run_command(if_formatted, 0));
> + ut_assert_nextline(missing_rbracket_error);
> +
> + sprintf(if_formatted, if_format, "[ aaa = bbb]");
> + ut_asserteq(1, run_command(if_formatted, 0));
> + ut_assert_nextline(missing_rbracket_error);
> +
> + return 0;
> +}
> +HUSH_TEST(hush_test_lbracket_alias, UTF_CONSOLE);
> --
> 2.53.0
>
Regards,
Simon
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/3] cmd: test: fix handling of single-argument form of test
2026-03-11 12:09 ` [PATCH 3/3] cmd: test: fix handling of single-argument form of test Rasmus Villemoes
@ 2026-03-16 2:43 ` Simon Glass
0 siblings, 0 replies; 12+ messages in thread
From: Simon Glass @ 2026-03-16 2:43 UTC (permalink / raw)
To: Rasmus Villemoes; +Cc: u-boot, Tom Rini
Hi Rasmus,
On Wed, 11 Mar 2026 at 06:09, Rasmus Villemoes <ravi@prevas.dk> wrote:
>
> POSIX states that
>
> 0 arguments:
> Exit false (1).
> 1 argument:
> Exit true (0) if $1 is not null; otherwise, exit false.
>
> and at least bash and busybox sh behave that way.
>
> The current 'argc < 3' does the right thing for a non-existing or
> empty argv[1], but not for a non-empty argv[1]. Fix that and add
> corresponding test cases.
>
> Signed-off-by: Rasmus Villemoes <ravi@prevas.dk>
> ---
> cmd/test.c | 11 +++++++++--
> test/hush/if.c | 30 ++++++++++++++++++++++++++++++
> 2 files changed, 39 insertions(+), 2 deletions(-)
>
> diff --git a/cmd/test.c b/cmd/test.c
> index f0645ef98f1..0d0f090386c 100644
> --- a/cmd/test.c
> +++ b/cmd/test.c
> @@ -71,10 +71,17 @@ static int do_test(struct cmd_tbl *cmdtp, int flag, int argc,
> argc--;
> }
>
> - /* args? */
> - if (argc < 3)
> + /*
> + * Per POSIX, 'test' with 0 arguments should return 1, while
> + * 'test <arg>' should be equivalent to 'test -n <arg>',
> + * i.e. true if and only if <arg> is not empty.
> + */
> + if (argc < 2)
> return 1;
>
> + if (argc == 2)
> + return !strcmp(argv[1], "");
> +
> #ifdef DEBUG
> {
> debug("test(%d):", argc);
> diff --git a/test/hush/if.c b/test/hush/if.c
> index 148e9a53e90..e82a95aaf27 100644
> --- a/test/hush/if.c
> +++ b/test/hush/if.c
> @@ -32,6 +32,15 @@ static int hush_test_if_base(struct unit_test_state *uts)
> sprintf(if_formatted, if_format, "false");
> ut_asserteq(1, run_command(if_formatted, 0));
Can you use run_commandf() here?
>
> + sprintf(if_formatted, if_format, "test");
> + ut_asserteq(1, run_command(if_formatted, 0));
> +
> + sprintf(if_formatted, if_format, "test ''");
> + ut_asserteq(1, run_command(if_formatted, 0));
> +
> + sprintf(if_formatted, if_format, "test 'abc'");
> + ut_assertok(run_command(if_formatted, 0));
> +
> return 0;
> }
> HUSH_TEST(hush_test_if_base, 0);
> @@ -343,6 +352,27 @@ static int hush_test_lbracket_alias(struct unit_test_state *uts)
> ut_asserteq(1, run_command(if_formatted, 0));
> ut_assert_nextline(missing_rbracket_error);
>
> + sprintf(if_formatted, if_format, "[ ]");
> + ut_asserteq(1, run_command(if_formatted, 0));
> +
> + sprintf(if_formatted, if_format, "[");
> + ut_asserteq(1, run_command(if_formatted, 0));
> + ut_assert_nextline(missing_rbracket_error);
> +
> + sprintf(if_formatted, if_format, "[ '' ]");
> + ut_asserteq(1, run_command(if_formatted, 0));
> +
> + sprintf(if_formatted, if_format, "[ ''");
> + ut_asserteq(1, run_command(if_formatted, 0));
> + ut_assert_nextline(missing_rbracket_error);
> +
> + sprintf(if_formatted, if_format, "[ 'abc' ]");
> + ut_assertok(run_command(if_formatted, 0));
> +
> + sprintf(if_formatted, if_format, "[ 'abc'");
> + ut_asserteq(1, run_command(if_formatted, 0));
> + ut_assert_nextline(missing_rbracket_error);
> +
> return 0;
> }
> HUSH_TEST(hush_test_lbracket_alias, UTF_CONSOLE);
> --
> 2.53.0
>
Regards,
Simon
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] test: add tests for left-bracket alias for 'test' command
2026-03-16 2:43 ` Simon Glass
@ 2026-03-16 8:16 ` Rasmus Villemoes
2026-03-17 12:28 ` Simon Glass
0 siblings, 1 reply; 12+ messages in thread
From: Rasmus Villemoes @ 2026-03-16 8:16 UTC (permalink / raw)
To: Simon Glass; +Cc: u-boot, Tom Rini
On Sun, Mar 15 2026, Simon Glass <sjg@chromium.org> wrote:
> Hi Rasmus,
>
> On Wed, 11 Mar 2026 at 06:09, Rasmus Villemoes <ravi@prevas.dk> wrote:
>>
>> Duplicate a few of the existing test cases, using the [ spelling, and
>> also ensure that the presence of a matching ] as a separate and last
>> argument is enforced.
>>
>> Signed-off-by: Rasmus Villemoes <ravi@prevas.dk>
>> ---
>> test/hush/if.c | 31 +++++++++++++++++++++++++++++++
>> 1 file changed, 31 insertions(+)
>>
>> diff --git a/test/hush/if.c b/test/hush/if.c
>> index ea615b246a9..148e9a53e90 100644
>> --- a/test/hush/if.c
>> +++ b/test/hush/if.c
>> @@ -315,3 +315,34 @@ static int hush_test_if_z_operator(struct unit_test_state *uts)
>> return 0;
>> }
>> HUSH_TEST(hush_test_if_z_operator, 0);
>> +
>> +static int hush_test_lbracket_alias(struct unit_test_state *uts)
>> +{
>> + char if_formatted[128];
>> + const char *missing_rbracket_error = "[: missing terminating ]";
>> +
>> + sprintf(if_formatted, if_format, "[ aaa = aaa ]");
>> + ut_assertok(run_command(if_formatted, 0));
>
> How about using run_commandf() so you can do this in one line? Looks
> good apart from that.
>
I did cringe a little when I saw that repeated sprintf()/run_command()
pattern all over that file, but I preferred to stay consistent with the
existing style.
If anything, one should do a whole-sale conversion of that file, but
then I'd not use run_commandf() directly, as one would still pass in
that if_format argument every time, so rather create a local macro that
wraps run_commandf() and provides that if_format as a literal string,
which would also enable format checking.
Rasmus
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] test: add tests for left-bracket alias for 'test' command
2026-03-16 8:16 ` Rasmus Villemoes
@ 2026-03-17 12:28 ` Simon Glass
2026-03-17 15:11 ` Rasmus Villemoes
0 siblings, 1 reply; 12+ messages in thread
From: Simon Glass @ 2026-03-17 12:28 UTC (permalink / raw)
To: Rasmus Villemoes; +Cc: u-boot, Tom Rini
Hi Rasmus,
On Mon, 16 Mar 2026 at 02:17, Rasmus Villemoes <ravi@prevas.dk> wrote:
>
> On Sun, Mar 15 2026, Simon Glass <sjg@chromium.org> wrote:
>
> > Hi Rasmus,
> >
> > On Wed, 11 Mar 2026 at 06:09, Rasmus Villemoes <ravi@prevas.dk> wrote:
> >>
> >> Duplicate a few of the existing test cases, using the [ spelling, and
> >> also ensure that the presence of a matching ] as a separate and last
> >> argument is enforced.
> >>
> >> Signed-off-by: Rasmus Villemoes <ravi@prevas.dk>
> >> ---
> >> test/hush/if.c | 31 +++++++++++++++++++++++++++++++
> >> 1 file changed, 31 insertions(+)
> >>
> >> diff --git a/test/hush/if.c b/test/hush/if.c
> >> index ea615b246a9..148e9a53e90 100644
> >> --- a/test/hush/if.c
> >> +++ b/test/hush/if.c
> >> @@ -315,3 +315,34 @@ static int hush_test_if_z_operator(struct unit_test_state *uts)
> >> return 0;
> >> }
> >> HUSH_TEST(hush_test_if_z_operator, 0);
> >> +
> >> +static int hush_test_lbracket_alias(struct unit_test_state *uts)
> >> +{
> >> + char if_formatted[128];
> >> + const char *missing_rbracket_error = "[: missing terminating ]";
> >> +
> >> + sprintf(if_formatted, if_format, "[ aaa = aaa ]");
> >> + ut_assertok(run_command(if_formatted, 0));
> >
> > How about using run_commandf() so you can do this in one line? Looks
> > good apart from that.
> >
>
> I did cringe a little when I saw that repeated sprintf()/run_command()
> pattern all over that file, but I preferred to stay consistent with the
> existing style.
>
> If anything, one should do a whole-sale conversion of that file, but
> then I'd not use run_commandf() directly, as one would still pass in
> that if_format argument every time, so rather create a local macro that
> wraps run_commandf() and provides that if_format as a literal string,
> which would also enable format checking.
Well you could have a helper function which takes the string argument
and does the assert. The duplication makes it a bit harder to
maintain.
sprintf(if_formatted, if_format, "test aaa != aaa");
ut_asserteq(1, run_command(if_formatted, 0));
could be something like:
ut_asserteq(1, check_operation("test aaa != aaa"));
If you had the energy to adjust the rest of the file, that seems good too.
Regards,
Simon
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] test: add tests for left-bracket alias for 'test' command
2026-03-17 12:28 ` Simon Glass
@ 2026-03-17 15:11 ` Rasmus Villemoes
2026-03-18 1:03 ` Simon Glass
0 siblings, 1 reply; 12+ messages in thread
From: Rasmus Villemoes @ 2026-03-17 15:11 UTC (permalink / raw)
To: Simon Glass; +Cc: u-boot, Tom Rini
On Tue, Mar 17 2026, Simon Glass <sjg@chromium.org> wrote:
> Hi Rasmus,
>
> On Mon, 16 Mar 2026 at 02:17, Rasmus Villemoes <ravi@prevas.dk> wrote:
>>
>> On Sun, Mar 15 2026, Simon Glass <sjg@chromium.org> wrote:
>>
>> > Hi Rasmus,
>> >
>> > On Wed, 11 Mar 2026 at 06:09, Rasmus Villemoes <ravi@prevas.dk> wrote:
>> >>
>> >> Duplicate a few of the existing test cases, using the [ spelling, and
>> >> also ensure that the presence of a matching ] as a separate and last
>> >> argument is enforced.
>> >>
>> >> Signed-off-by: Rasmus Villemoes <ravi@prevas.dk>
>> >> ---
>> >> test/hush/if.c | 31 +++++++++++++++++++++++++++++++
>> >> 1 file changed, 31 insertions(+)
>> >>
>> >> diff --git a/test/hush/if.c b/test/hush/if.c
>> >> index ea615b246a9..148e9a53e90 100644
>> >> --- a/test/hush/if.c
>> >> +++ b/test/hush/if.c
>> >> @@ -315,3 +315,34 @@ static int hush_test_if_z_operator(struct unit_test_state *uts)
>> >> return 0;
>> >> }
>> >> HUSH_TEST(hush_test_if_z_operator, 0);
>> >> +
>> >> +static int hush_test_lbracket_alias(struct unit_test_state *uts)
>> >> +{
>> >> + char if_formatted[128];
>> >> + const char *missing_rbracket_error = "[: missing terminating ]";
>> >> +
>> >> + sprintf(if_formatted, if_format, "[ aaa = aaa ]");
>> >> + ut_assertok(run_command(if_formatted, 0));
>> >
>> > How about using run_commandf() so you can do this in one line? Looks
>> > good apart from that.
>> >
>>
>> I did cringe a little when I saw that repeated sprintf()/run_command()
>> pattern all over that file, but I preferred to stay consistent with the
>> existing style.
>>
>> If anything, one should do a whole-sale conversion of that file, but
>> then I'd not use run_commandf() directly, as one would still pass in
>> that if_format argument every time, so rather create a local macro that
>> wraps run_commandf() and provides that if_format as a literal string,
>> which would also enable format checking.
>
> Well you could have a helper function which takes the string argument
> and does the assert. The duplication makes it a bit harder to
> maintain.
>
> sprintf(if_formatted, if_format, "test aaa != aaa");
> ut_asserteq(1, run_command(if_formatted, 0));
>
> could be something like:
>
> ut_asserteq(1, check_operation("test aaa != aaa"));
Yes, I'd definitely make sure that each test would only occupy one
source line instead of two. What I meant was that I didn't want to
convert
sprintf(if_formatted, if_format, "test aaa = aaa");
ut_assertok(run_command(if_formatted, 0));
mechanically into
ut_assertok(run_commandf(if_format, "test aaa = aaa", 0));
and having to repeat that if_format thing on each and every line.
Also, I think I would prefer to change the assertok()s into asserteq(0,
... ) as I think the mix of assertok() and asserteq(1, ...) is not very
readable.
> If you had the energy to adjust the rest of the file, that seems good too.
I will fix that in a followup if the current patches get merged (they're
at v2 by the way), I do not have the energy to start over and doing the
mechanical changes first and then redo my patches on top of that, so
please don't request that I do that.
Rasmus
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] test: add tests for left-bracket alias for 'test' command
2026-03-17 15:11 ` Rasmus Villemoes
@ 2026-03-18 1:03 ` Simon Glass
0 siblings, 0 replies; 12+ messages in thread
From: Simon Glass @ 2026-03-18 1:03 UTC (permalink / raw)
To: Rasmus Villemoes; +Cc: u-boot, Tom Rini
Hi Rasmus,
On Tue, 17 Mar 2026 at 09:12, Rasmus Villemoes <ravi@prevas.dk> wrote:
>
> On Tue, Mar 17 2026, Simon Glass <sjg@chromium.org> wrote:
>
> > Hi Rasmus,
> >
> > On Mon, 16 Mar 2026 at 02:17, Rasmus Villemoes <ravi@prevas.dk> wrote:
> >>
> >> On Sun, Mar 15 2026, Simon Glass <sjg@chromium.org> wrote:
> >>
> >> > Hi Rasmus,
> >> >
> >> > On Wed, 11 Mar 2026 at 06:09, Rasmus Villemoes <ravi@prevas.dk> wrote:
> >> >>
> >> >> Duplicate a few of the existing test cases, using the [ spelling, and
> >> >> also ensure that the presence of a matching ] as a separate and last
> >> >> argument is enforced.
> >> >>
> >> >> Signed-off-by: Rasmus Villemoes <ravi@prevas.dk>
> >> >> ---
> >> >> test/hush/if.c | 31 +++++++++++++++++++++++++++++++
> >> >> 1 file changed, 31 insertions(+)
> >> >>
> >> >> diff --git a/test/hush/if.c b/test/hush/if.c
> >> >> index ea615b246a9..148e9a53e90 100644
> >> >> --- a/test/hush/if.c
> >> >> +++ b/test/hush/if.c
> >> >> @@ -315,3 +315,34 @@ static int hush_test_if_z_operator(struct unit_test_state *uts)
> >> >> return 0;
> >> >> }
> >> >> HUSH_TEST(hush_test_if_z_operator, 0);
> >> >> +
> >> >> +static int hush_test_lbracket_alias(struct unit_test_state *uts)
> >> >> +{
> >> >> + char if_formatted[128];
> >> >> + const char *missing_rbracket_error = "[: missing terminating ]";
> >> >> +
> >> >> + sprintf(if_formatted, if_format, "[ aaa = aaa ]");
> >> >> + ut_assertok(run_command(if_formatted, 0));
> >> >
> >> > How about using run_commandf() so you can do this in one line? Looks
> >> > good apart from that.
> >> >
> >>
> >> I did cringe a little when I saw that repeated sprintf()/run_command()
> >> pattern all over that file, but I preferred to stay consistent with the
> >> existing style.
> >>
> >> If anything, one should do a whole-sale conversion of that file, but
> >> then I'd not use run_commandf() directly, as one would still pass in
> >> that if_format argument every time, so rather create a local macro that
> >> wraps run_commandf() and provides that if_format as a literal string,
> >> which would also enable format checking.
> >
> > Well you could have a helper function which takes the string argument
> > and does the assert. The duplication makes it a bit harder to
> > maintain.
> >
> > sprintf(if_formatted, if_format, "test aaa != aaa");
> > ut_asserteq(1, run_command(if_formatted, 0));
> >
> > could be something like:
> >
> > ut_asserteq(1, check_operation("test aaa != aaa"));
>
> Yes, I'd definitely make sure that each test would only occupy one
> source line instead of two. What I meant was that I didn't want to
> convert
>
> sprintf(if_formatted, if_format, "test aaa = aaa");
> ut_assertok(run_command(if_formatted, 0));
>
> mechanically into
>
> ut_assertok(run_commandf(if_format, "test aaa = aaa", 0));
>
> and having to repeat that if_format thing on each and every line.
>
> Also, I think I would prefer to change the assertok()s into asserteq(0,
> ... ) as I think the mix of assertok() and asserteq(1, ...) is not very
> readable.
>
> > If you had the energy to adjust the rest of the file, that seems good too.
>
> I will fix that in a followup if the current patches get merged (they're
> at v2 by the way), I do not have the energy to start over and doing the
> mechanical changes first and then redo my patches on top of that, so
> please don't request that I do that.
That's fine with me, please do. Yes I think I missed v1.
Reviewed-by: Simon Glass <sjg@chromium.org>
Regards,
Simon
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2026-03-18 1:04 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-11 12:09 [PATCH 0/3] add [ as alias for test, fix 0/1 argument handling Rasmus Villemoes
2026-03-11 12:09 ` [PATCH 1/3] cmd: test: allow using [ as alias for test Rasmus Villemoes
2026-03-11 13:08 ` Quentin Schulz
2026-03-11 13:25 ` Rasmus Villemoes
2026-03-11 12:09 ` [PATCH 2/3] test: add tests for left-bracket alias for 'test' command Rasmus Villemoes
2026-03-16 2:43 ` Simon Glass
2026-03-16 8:16 ` Rasmus Villemoes
2026-03-17 12:28 ` Simon Glass
2026-03-17 15:11 ` Rasmus Villemoes
2026-03-18 1:03 ` Simon Glass
2026-03-11 12:09 ` [PATCH 3/3] cmd: test: fix handling of single-argument form of test Rasmus Villemoes
2026-03-16 2:43 ` Simon Glass
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox