commit 51befa40a2b5b059c708dfb5d162a9a3b3311af3
parent 4ce92416beb93921086fa8488ba02da2227a4101
Author: Richard Ipsum <richardipsum@vx21.xyz>
Date: Sat, 23 Nov 2019 18:20:51 +0000
Allow multiple implementation files
Diffstat:
3 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/tyarn.1 b/tyarn.1
@@ -2,7 +2,7 @@
.SH NAME
tyarn \- scenario testing of Unix command line tools
.SH SYNOPSIS
-.B tyarn \fR[OPTION...] \fISCENARIO_FILE IMPLEMENTATION_FILE\fR
+.B tyarn \fR[OPTION...] \fISCENARIO_FILE IMPLEMENTATION_FILE...\fR
.SH DESCRIPTION
tyarn is a scenario testing tool, it is based on yarn, and supports a similar
but more limited set of features and syntax. tyarn translates scenarios written
diff --git a/tyarn.c b/tyarn.c
@@ -329,7 +329,7 @@ static int tyarn_rmutil(lua_State *L)
static void usage(void)
{
- fprintf(stderr, "usage: tyarn [-CdEehlstv] SCENARIO_FILE IMPLEMENTATION_FILE\n");
+ fprintf(stderr, "usage: tyarn [-CdEehlstv] SCENARIO_FILE IMPLEMENTATION_FILE...\n");
}
static int tyarn_usage(lua_State *L)
diff --git a/tyarn.in b/tyarn.in
@@ -39,9 +39,7 @@ function normalise_scenario_line(str, step_type)
return normalised
end
-function parse_implementations(filepath)
- implementations = {}
-
+function parse_implementations(filepath, implementations)
file, err = io.open(filepath)
if file == nil then
io.stderr:write(string.format("Couldn't open implementation file: %s\n", filepath, err))
@@ -203,9 +201,10 @@ function _parse_scenarios(scenario_list, scenarios, file, scenario_name, scenari
end
function parse_scenarios(filepath)
- scenario_list = {}
- scenarios = {}
- line_no = 0
+ local scenario_list = {}
+ local scenarios = {}
+ local scenario_name = nil
+ local line_no = 0
file, err = io.open(filepath)
if file == nil then
@@ -225,6 +224,10 @@ function parse_scenarios(filepath)
end
end
+ if scenario_name == nil then
+ return nil, nil -- no scenario
+ end
+
-- now we have the base case, begin the recursion
_parse_scenarios(scenario_list, scenarios, file, scenario_name, line_no)
@@ -479,7 +482,14 @@ if parsed_args["debug"] or DEBUG then
end
scenario_list, scenarios = parse_scenarios(parsed_args[1])
+
+implementations = {}
seen = {}
+
+for i = 2, #parsed_args do
+ parse_implementations(parsed_args[i], implementations)
+end
+
for _, scenario_name in ipairs(scenario_list) do
if seen[scenario_name] then
io.stderr:write(string.format("Duplicate scenario: '%s'\n", scenario_name))
@@ -489,8 +499,6 @@ for _, scenario_name in ipairs(scenario_list) do
seen[scenario_name] = true
end
-implementations = parse_implementations(parsed_args[2])
-
for _, scenario_name in ipairs(scenario_list) do
passed = run_scenario(scenarios, implementations, scenario_name, parsed_args['shell_lib'])