aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/luatests/luatests/tests.lua
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/luatests/luatests/tests.lua')
-rw-r--r--src/plugins/luatests/luatests/tests.lua69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/plugins/luatests/luatests/tests.lua b/src/plugins/luatests/luatests/tests.lua
new file mode 100644
index 0000000000..fb246ae94d
--- /dev/null
+++ b/src/plugins/luatests/luatests/tests.lua
@@ -0,0 +1,69 @@
+-- Copyright (C) 2024 The Qt Company Ltd.
+-- SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+local Utils = require("Utils")
+local Action = require("Action")
+local a = require("async")
+
+
+local function script_path()
+ local str = debug.getinfo(2, "S").source:sub(2)
+ return str
+end
+
+local function printResults(results)
+ print("Passed:", results.passed)
+ print("Failed:", results.failed)
+ for index, value in ipairs(results.failedTests) do
+ print("Failed test:", value.name, value.error)
+ end
+end
+
+local function runTest(testFile, results)
+ local testScript, err = loadfile(testFile:nativePath())
+ if not testScript then
+ print("Failed to load test:", testFile, err)
+ return
+ end
+
+ local ok, testFunctions = pcall(testScript)
+ if not ok then
+ print("Failed to run test:", testFile, testFunctions)
+ return
+ end
+
+ for k, v in pairs(testFunctions) do
+ print("* " .. testFile:fileName() .. " : " .. k)
+ local ok, res_or_error = pcall(v)
+
+ if ok then
+ results.passed = results.passed + 1
+ else
+ results.failed = results.failed + 1
+ table.insert(results.failedTests, { name = testFile:fileName() .. ":" .. k, error = res_or_error })
+ end
+ end
+end
+
+local function runTests()
+ local results = {
+ passed = 0,
+ failed = 0,
+ failedTests = {}
+ }
+
+ local testDir = Utils.FilePath.fromUserInput(script_path()):parentDir()
+ local tests = a.wait(testDir:dirEntries({ nameFilters = { "tst_*.lua" } }))
+ for _, testFile in ipairs(tests) do
+ runTest(testFile, results)
+ end
+ printResults(results)
+end
+
+local function setup()
+ Action.create("LuaTests.run", {
+ text = "Run lua tests",
+ onTrigger = function() a.sync(runTests)() end,
+ })
+end
+
+return { setup = setup }