summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Maw <richard.maw@gmail.com>2017-01-08 14:59:25 +0000
committerRichard Maw <richard.maw@gmail.com>2017-01-08 15:01:29 +0000
commitc9c0d3d997bf878164d9123743363d23e789932a (patch)
tree55a42e15dc4457d3016f1344ffe8df853b53193e
parent17284b8e42da5a359f06dd4b56488914a008c1c4 (diff)
downloadgitano-c9c0d3d997bf878164d9123743363d23e789932a.tar.gz
testing: Add a way to extract variables from the test suite
-rw-r--r--TESTING17
-rw-r--r--lib/gitano/repository.lua23
-rw-r--r--testing/gitano-test-tool.in3
3 files changed, 43 insertions, 0 deletions
diff --git a/TESTING b/TESTING
index 6253086..8d65f15 100644
--- a/TESTING
+++ b/TESTING
@@ -254,3 +254,20 @@ Tip and tricks when writing tests for Gitano
however, `bash` then you should take extra care not to write bashisms into
your test implementations.
+Analysing the variables used in lace contexts
+=============================================
+
+The set of predicates and variables available to lace contexts
+depends on the operation, and in many cases the data in the repository.
+
+This makes it difficult to know exactly what variables are available.
+
+To aid with this, if `GITANO_DUMP_VARIABLE_FILE` is set in the environment
+it will write a table of variables and the operations they exist in
+to the file path in `GITANO_DUMP_VARIABLE_FILE`.
+
+To make use of this in the test suite add
+`--env GITANO_DUMP_VARIABLE_FILE=$file_path` to `YARN_ARGS`.
+
+This is not compatible with running yarns in parallel
+and depends on the test suite coverage to produce sufficient results.
diff --git a/lib/gitano/repository.lua b/lib/gitano/repository.lua
index 7858a33..e48267f 100644
--- a/lib/gitano/repository.lua
+++ b/lib/gitano/repository.lua
@@ -165,6 +165,29 @@ end
function repo_method:run_lace(context)
self:populate_context(context)
config.populate_context(self.config, context)
+ local vardump = luxio.getenv("GITANO_DUMP_VARIABLE_FILE")
+ if vardump then
+ local io = require "io"
+ local pretty = require "pl.pretty"
+ local t
+ local fh = io.open(vardump, "r")
+ if not fh then
+ t = {}
+ else
+ t = pretty.read(fh:read("*a"))
+ fh:close()
+ end
+ local op = context.operation
+ for k, _ in pairs(context) do
+ if not t[k] then
+ t[k] = {}
+ end
+ t[k][op] = true
+ end
+ local fh = io.open(vardump, "w+")
+ fh:write(pretty.write(t))
+ fh:close()
+ end
return lace.run(self.lace, context)
end
diff --git a/testing/gitano-test-tool.in b/testing/gitano-test-tool.in
index 88ccbc5..944a3c2 100644
--- a/testing/gitano-test-tool.in
+++ b/testing/gitano-test-tool.in
@@ -46,6 +46,9 @@ local function unix_assert(ret, errno)
end
local function run_program(t)
+ if t.env and os.getenv("GITANO_DUMP_VARIABLE_FILE") then
+ t.env["GITANO_DUMP_VARIABLE_FILE"] = os.getenv("GITANO_DUMP_VARIABLE_FILE")
+ end
local f = io.open(basedir .. "last-program", "w")
local function print (...)
f:write(...)