From 72f4aa9b7ec964996011c590331d980f9925ab05 Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Thu, 1 May 2025 08:37:14 +0300 Subject: [PATCH] tools: fix `v timeout 2 sleep 5` --- cmd/tools/vtimeout.v | 7 ++++++- cmd/tools/vtimeout_test.v | 41 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 cmd/tools/vtimeout_test.v diff --git a/cmd/tools/vtimeout.v b/cmd/tools/vtimeout.v index 65bc5016e..f04f44a45 100644 --- a/cmd/tools/vtimeout.v +++ b/cmd/tools/vtimeout.v @@ -36,7 +36,12 @@ fn main() { cmd_args: args[1..].clone() } - mut p := os.new_process(ctx.cmd_args[0]) + mut cmd := ctx.cmd_args[0] + if !os.exists(cmd) { + cmd = os.find_abs_path_of_executable(cmd) or { cmd } + } + + mut p := os.new_process(cmd) p.set_args(ctx.cmd_args[1..]) p.run() if p.err != '' { diff --git a/cmd/tools/vtimeout_test.v b/cmd/tools/vtimeout_test.v new file mode 100644 index 000000000..4a8577599 --- /dev/null +++ b/cmd/tools/vtimeout_test.v @@ -0,0 +1,41 @@ +import os + +const qvexe = os.quoted_path(@VEXE) + +fn depend_on_command(cmd string) ? { + path := os.find_abs_path_of_executable(cmd) or { + println('skip: ${cmd} not found') + return none + } + res := os.execute('${os.quoted_path(path)} --version') + if res.exit_code != 0 { + println('skip: ${cmd} does not support --version') + return none + } + if !res.output.contains('GNU coreutils') { + println('skip: ${cmd} is not from coreutils') + return none + } +} + +fn test_normal_exit_without_timeout_echo() { + depend_on_command('echo') or { return } + ee := os.execute('${qvexe} timeout 0.2 echo') + assert ee.exit_code == 0, ee.output + res := os.execute('${qvexe} timeout 0.2 echo z123') + assert res.exit_code == 0, res.output + assert res.output.contains('z123') +} + +fn test_normal_exit_without_timeout_sleep() { + depend_on_command('sleep') or { return } + res := os.execute('${qvexe} timeout 0.4 sleep 0.1') + assert res.exit_code == 0, res.output + assert res.output == '' +} + +fn test_exit_with_timeout() { + depend_on_command('sleep') or { return } + res := os.execute('${qvexe} timeout 0.2 sleep 2') + assert res.exit_code == 124, res.output +} -- 2.39.5