ComputerCraft Archive

test spec

computer utility mc-cc-scripts github

Description

implement Test Suite

Installation

Copy one of these commands into your ComputerCraft terminal:

wget:wget https://raw.githubusercontent.com/mc-cc-scripts/script-manager/master/tests/test_spec.lua test_spec
Archive:wget https://cc.shobie.xyz/cc/get/gh-mc-cc-scripts-script-manager-tests-test-spec test_spec
Quick Install: wget https://cc.shobie.xyz/cc/get/gh-mc-cc-scripts-script-manager-tests-test-spec test spec

Usage

Run: test_spec

Tags

none

Source

View Original Source

Code Preview

--TODO:
--implement Test Suite
require("tests/testSuite")
require("tests.Suite.helperFunctions")

--#region assert Definitions

---@class are
---@field same function
---@field equal function
---@field equals function

---@class is
---@field truthy function
---@field falsy function
---@field not_true function
---@field not_false function

---@class has
---@field error function
---@field errors function

---@class assert
---@field are are
---@field is is
---@field are_not are
---@field is_not is
---@field has has
---@field has_no has
---@field True function
---@field False function
---@field has_error function
---@field is_true function
---@field equal function
assert = assert

--#endregion assert Definitions

local configTmp
local scriptTmp
local testScript
---@param scm SCM
local function saveConfig(scm)
    local config = scm.Config
    config:loadConfig()
    configTmp = table.copy(config:getAll())
end

---@param scm SCM
local function restoreConfig(scm)
    local config = scm.Config
    config:saveConfig(configTmp)
end

---@param scm SCM
local function saveScripts(scm)
    local scriptManager = scm.ScriptManager
    scriptManager:loadScripts()
    scriptTmp = table.copy(scriptManager.scripts)
end

---@param scm SCM
local function restoreScripts(scm)
    local scriptManager = scm.ScriptManager
    scriptManager.scripts = scriptTmp
    scriptManager:saveScripts()
end
---@param func function
---@param ... any
local function runTests(func, ...)
    ---@class SCM

    local scm = require("../scm")
    saveConfig(scm)
    saveScripts(scm)
    scm.Config:set("libraryDirectory", "tmpLibs/");
    scm.Config:set("programDirectory", "tmpPrograms/");
    local success, err = pcall(func, scm, ...)
    restoreConfig(scm)
    restoreScripts(scm)
    assert.is.falsy(err)
    os.execute("rm -rf tmpLibs")

    if not success then
        error('Error Message was empty')
    end
end


describe("Testing everything about SCM:", function()
    --only neccessary for local testing
    describe("Copy Files", function()
        assert.is_true(fs.copy("./scm.lua", "tmpFiles/scm.lua"), "Could not copy scm.lua")
        assert.is_true(fs.copy("./libs/scm/config.lua", "tmpFiles/config.lua"), "Could not copy config.lua")
        assert.is_true(fs.copy("./libs/scm/net.lua", "tmpFiles/net.lua"), "Could not copy net.lua")
        assert.is_true(fs.copy("./libs/scm/log.lua", "tmpFiles/log.lua"), "Could not copy log.lua")
        assert.is_true(fs.copy("./libs/scm/scriptManager.lua", "tmpFiles/scriptManager.lua"),
            "Could not copy scriptManager.lua")
        assert.is_true(fs.copy("./libs/scm/autocomplete.lua", "tmpFiles/autocomplete.lua"),
            "Could not copy autocomplete.lua")
        assert.is_true(fs.copy("./libs/scm/ui.lua", "tmpFiles/ui.lua"), "Could not copy ui.lua")
    end)

    describe("Require all SCM Modules", function()
        it("should be able to require all modules", function()
            local scm = require("../scm")
            assert.is_true('table' == type(scm))
            assert.is.truthy(scm.Autocomplete)
            assert.is.truthy(scm.Config)
            assert.is.truthy(scm.Net)
            assert.is.truthy(scm.UI)
            assert.is.truthy(scm.ScriptManager)
            assert.is.truthy(scm.Log)
        end)
    end)

    describe("Config ->", function()
        it("Change SCM Config", function()
            runTests(function(scm)
                local config = scm.Config
                -- Set Config
                config:set("verbose", false)
                assert.is.truthy(config:getAll()["verbose"] == false)
                config:set("verbose", "Wrong")
                config:saveConfig()
                config:set("verbose", false)

                -- Check if the file saved correctly
                config:loadConfig()
                assert.equal("Wrong", config:getAll()["verbose"])
                config:set("verbose", true)
                assert.is.truthy(config:getAll()["verbose"] == true)
            end)
        end)
    end)

    describe("ScriptManager ->", function()
        it("Load Empty", function()
            runTests(
                function(scm)
                    scm.Config:set("libraryDirectory", "tmpLibs");
                    local scriptManager = scm.ScriptManager
                    scriptManager:loadScripts()
                    local scripts = scriptManager.scripts
                    assert.is.truthy(scripts)
                    assert.is.truthy(type(scripts) == "table")
                end
            )
        end)
        it("Load Local", function()
            runTests(
                function(scm)
                    local scriptManager = scm.ScriptManager
                    local file = io.open("localtestFile.lua", "w")
                    if not file then
                        error('file not create')
                    end
                    file:write("local t = {test = true} \n return t")
                    file:close()
                    local tFile = scm:load("localtestFile")
                    assert.is.truthy(tFile)
                    assert.is.truthy(tFile.test)
                    os.remove("localtestFile.lua")
                end
            )
        end)
        describe("Load Remote", function()
            it("Get TestLib", function()
                runTests(
                ---@param scm SCM
                    function(scm)
                        local testScript = scm:load("scmTest")
                        local scriptManager = scm.ScriptManager
                        assert.is.truthy(testScript)
                        assert.is.truthy(testScript.test)
                    end
                )
            end)
        end)
        describe("Update SCM", function()
            it("Update SCM", function()
                runTests(
                ---@param scm SCM
                    function(scm)
                        -- TODO: implement
                    end
                )
            end)
        end)
    end)

    -- only neccessary for local testing
    describe("Restore Files", function()
        assert.is_true(fs.copy("tmpFiles/scm.lua", "./scm.lua"), "Could not restore scm.lua")
        assert.is_true(fs.copy("tmpFiles/config.lua", "./libs/scm/config.lua"), "Could not restore config.lua")
        assert.is_true(fs.copy("tmpFiles/net.lua", "./libs/scm/net.lua"), "Could not restore net.lua")
        assert.is_true(fs.copy("tmpFiles/log.lua", "./libs/scm/log.lua"), "Could not restore log.lua")
        assert.is_true(fs.copy("tmpFiles/scriptManager.lua", "./libs/scm/scriptManager.lua"),
            "Could not restore scriptManager.lua")
        assert.is_true(fs.copy("tmpFiles/autocomplete.lua", "./libs/scm/autocomplete.lua"),
            "Could not restore autocomplete.lua")
        assert.is_true(fs.copy("tmpFiles/ui.lua", "./libs/scm/ui.lua"), "Could not restore ui.lua")
        os.execute("rm --recursive ./tmpFiles")
    end)
end)