diff --git a/.busted b/.busted new file mode 100644 index 00000000..133edb7e --- /dev/null +++ b/.busted @@ -0,0 +1,5 @@ +return { + default = { + verbose = true, + }, +} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3193e0b6..5d2aa09e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -34,3 +34,11 @@ jobs: else echo "Rockspec unchanged, nothing to do" fi + + unit_tests: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Run Busted + uses: lunarmodules/busted@v2.1.0 diff --git a/init.lua b/init.lua index b59d5dd9..79896748 100644 --- a/init.lua +++ b/init.lua @@ -8,8 +8,13 @@ --]] +local requirePrefix= tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix=requirePrefix.."." +end + return { - layout = require("lain.layout"), - util = require("lain.util"), - widget = require("lain.widget") + layout = require(requirePrefix .. "layout"), + util = require(requirePrefix .. "util"), + widget = require(requirePrefix .. "widget") } diff --git a/layout/init.lua b/layout/init.lua index 6478b060..5bd4c2d2 100644 --- a/layout/init.lua +++ b/layout/init.lua @@ -11,9 +11,14 @@ --]] -local wrequire = require("lain.helpers").wrequire +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local wrequire = require(requirePrefix .. "helpers").wrequire local setmetatable = setmetatable -local layout = { _NAME = "lain.layout" } +local layout = { _NAME = requirePrefix .. "layout" } return setmetatable(layout, { __index = wrequire }) diff --git a/spec/data/lines_from.txt b/spec/data/lines_from.txt new file mode 100644 index 00000000..f87e9a83 --- /dev/null +++ b/spec/data/lines_from.txt @@ -0,0 +1,4 @@ +line1 +line2 +line3 +line4 \ No newline at end of file diff --git a/spec/helpers_spec.lua b/spec/helpers_spec.lua new file mode 100644 index 00000000..4d55c332 --- /dev/null +++ b/spec/helpers_spec.lua @@ -0,0 +1,138 @@ +describe("Test helpers functions", function() + package.loaded["awful"] = {} + package.loaded["awful.spawn"] = { + easy_async=function (cmd,f) + f(cmd,0,0,1) + end, + easy_async_with_shell=function (cmd,f) + f(cmd,0,0,1) + end, + with_line_callback=function (cmd,f) + f.stdout(cmd) + end + + } + local timer ={ + start= function () end, + connect_signal= function () end, + emit_signal= function () end, + } + local timerMock=mock(timer,true) + package.loaded["gears.timer"] =function() return timerMock end + + + it("file_exists", function() + local helpers = require("helpers") + assert.is_true(helpers.file_exists("init.lua")) + assert.is_false(helpers.file_exists("init2.lua")) + end) + it("lines_from", function() + local result = { + "line1", + "line2", + "line3", + "line4", + } + local helpers = require("helpers") + assert.are.same(helpers.lines_from("spec/data/lines_from.txt"),result) + end) + it("lines_match", function() + local result = { + "line1", + "line3", + } + local helpers = require("helpers") + assert.are.same(helpers.lines_match("line[1,3]","spec/data/lines_from.txt"),result) + end) + it("first_line", function() + local helpers = require("helpers") + assert.are.same(helpers.first_line("spec/data/lines_from.txt"),"line1") + assert.are.equals(helpers.first_line("spec/data/no_file.txt"),nil) + end) + it("first_nonempty_line", function() + local helpers = require("helpers") + assert.are.same(helpers.first_nonempty_line("spec/data/lines_from.txt"),"line1") + end) + + + it("newtimer", function() + local helpers = require("helpers") + + assert.is_false(helpers.newtimer("name",10,"fun",false,false)) + assert.stub(timer.start).was.called_with(timerMock) + assert.stub(timer.connect_signal).was.called_with(timerMock,"timeout", "fun") + assert.stub(timer.emit_signal).was.called_with(timerMock,"timeout") + assert.are.equals(helpers.newtimer("name",10,"fun",true,true),timerMock) + end) + + it("async", function() + local helpers = require("helpers") + helpers.async("date",function (out,code) + assert.is.truthy(#out) + assert.is.truthy(code) + end) + end) + it("async_with_shell", function() + local helpers = require("helpers") + helpers.async_with_shell("date",function (out,code) + assert.is.truthy(#out) + assert.is.truthy(code) + end) + end) + it("line_callback", function() + local helpers = require("helpers") + helpers.line_callback("date",function (out) + assert.is.truthy(#out) + end) + end) + + it("map_table", function() + local helpers = require("helpers") + helpers.set_map("key","value") + assert.are.equals(helpers.get_map("key"),"value") + end) + + it("element_in_table", function() + local helpers = require("helpers") + local table={ + a=1, + b=2, + c=3, + } + assert.is_true(helpers.element_in_table(1,table)) + assert.is_false(helpers.element_in_table(5,table)) + end) + + it("spairs", function() + local helpers = require("helpers") + local table={ + a=1, + c=3, + b=2, + } + local f=helpers.spairs(table) + key,value=f() + assert.are.equals(key,"a") + assert.are.equals(value,1) + key,value=f() + assert.are.equals(key,"b") + assert.are.equals(value,2) + key,value=f() + assert.are.equals(key,"c") + assert.are.equals(value,3) + end) + + it("trivial_partition_set", function() + local helpers = require("helpers") + local table={"a","b","c"} + local result={{"a"}, {"b"}, {"c"}} + assert.are.same(helpers.trivial_partition_set(table),result) + end) + + it("powerset", function() + local helpers = require("helpers") + local table={"a","b","c"} + local result={{},{"a"}, {"b"},{"b","a"}, {"c"},{"c","a"},{"c","b"},{"c","b","a"}} + assert.are.same(helpers.powerset(table),result) + end) +end) diff --git a/spec/init_spec.lua b/spec/init_spec.lua new file mode 100644 index 00000000..8f8a334b --- /dev/null +++ b/spec/init_spec.lua @@ -0,0 +1,17 @@ +describe("Test the requires", function() + package.loaded["awful"] = {} + package.loaded["awful.spawn"] = {} + package.loaded["gears.timer"] = {} + it("init", function() + require("init") + end) + it("layout", function() + require("layout") + end) + it("util", function() + require("util") + end) + it("widget", function() + require("widget") + end) +end) diff --git a/util/init.lua b/util/init.lua index 5ae05232..da97f819 100644 --- a/util/init.lua +++ b/util/init.lua @@ -11,17 +11,22 @@ --]] +local requirePrefix= tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix=requirePrefix.."." +end + local awful = require("awful") local sqrt = math.sqrt local pairs = pairs local client = client local tonumber = tonumber -local wrequire = require("lain.helpers").wrequire +local wrequire = require(requirePrefix .. "helpers").wrequire local setmetatable = setmetatable -- Lain utilities submodule -- lain.util -local util = { _NAME = "lain.util" } +local util = { _NAME = requirePrefix .. "util" } -- Like awful.menu.clients, but only show clients of currently selected tags function util.menu_clients_current_tags(menu, args) diff --git a/util/menu_iterator.lua b/util/menu_iterator.lua index d457473a..fd20e862 100644 --- a/util/menu_iterator.lua +++ b/util/menu_iterator.lua @@ -10,8 +10,13 @@ -- Menu iterator with Naughty notifications -- lain.util.menu_iterator +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + local naughty = require("naughty") -local helpers = require("lain.helpers") +local helpers = require(requirePrefix .. "helpers") local atable = require("awful.util").table local assert = assert local pairs = pairs diff --git a/widget/alsa.lua b/widget/alsa.lua index 202dc981..faf29d74 100644 --- a/widget/alsa.lua +++ b/widget/alsa.lua @@ -6,7 +6,12 @@ --]] -local helpers = require("lain.helpers") +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") local shell = require("awful.util").shell local wibox = require("wibox") local string = string diff --git a/widget/alsabar.lua b/widget/alsabar.lua index 8e8cd3a8..999b5729 100644 --- a/widget/alsabar.lua +++ b/widget/alsabar.lua @@ -6,7 +6,12 @@ --]] -local helpers = require("lain.helpers") +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") local awful = require("awful") local naughty = require("naughty") local wibox = require("wibox") diff --git a/widget/bat.lua b/widget/bat.lua index 260f4b99..92a5dbf9 100644 --- a/widget/bat.lua +++ b/widget/bat.lua @@ -1,12 +1,17 @@ --[[ - Licensed under GNU General Public License v2 - * (c) 2013, Luca CPZ - * (c) 2010-2012, Peter Hofmann + Licensed under GNU General Public License v2 + * (c) 2013, Luca CPZ + * (c) 2010-2012, Peter Hofmann --]] -local helpers = require("lain.helpers") +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") local fs = require("gears.filesystem") local naughty = require("naughty") local wibox = require("wibox") diff --git a/widget/cal.lua b/widget/cal.lua index 97dced84..f4a40eda 100644 --- a/widget/cal.lua +++ b/widget/cal.lua @@ -5,8 +5,13 @@ --]] -local helpers = require("lain.helpers") -local markup = require("lain.util.markup") +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") +local markup = require(requirePrefix .. "util.markup") local awful = require("awful") local naughty = require("naughty") local floor = math.floor diff --git a/widget/contrib/init.lua b/widget/contrib/init.lua index 9e863a52..1b308c97 100644 --- a/widget/contrib/init.lua +++ b/widget/contrib/init.lua @@ -10,9 +10,14 @@ --]] -local wrequire = require("lain.helpers").wrequire +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local wrequire = require(requirePrefix .. "helpers").wrequire local setmetatable = setmetatable -local widget = { _NAME = "lain.widget.contrib" } +local widget = { _NAME = requirePrefix .. "widget.contrib" } return setmetatable(widget, { __index = wrequire }) diff --git a/widget/contrib/moc.lua b/widget/contrib/moc.lua index ad6452e2..2d7939db 100644 --- a/widget/contrib/moc.lua +++ b/widget/contrib/moc.lua @@ -5,7 +5,12 @@ --]] -local helpers = require("lain.helpers") +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") local shell = require("awful.util").shell local focused = require("awful.screen").focused local escape_f = require("awful.util").escape diff --git a/widget/contrib/redshift.lua b/widget/contrib/redshift.lua index d91d941d..c27e92e4 100644 --- a/widget/contrib/redshift.lua +++ b/widget/contrib/redshift.lua @@ -6,7 +6,12 @@ --]] -local async = require("lain.helpers").async +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local async = require(requirePrefix .. ".helpers").async local awful = require("awful") local execute = os.execute local type = type diff --git a/widget/contrib/task.lua b/widget/contrib/task.lua index 23119969..51ac5bde 100644 --- a/widget/contrib/task.lua +++ b/widget/contrib/task.lua @@ -5,8 +5,13 @@ --]] -local helpers = require("lain.helpers") -local markup = require("lain.util").markup +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") +local markup = require(requirePrefix .. "util").markup local awful = require("awful") local naughty = require("naughty") local mouse = mouse diff --git a/widget/contrib/tp_smapi.lua b/widget/contrib/tp_smapi.lua index 87c5e510..c7a007e9 100644 --- a/widget/contrib/tp_smapi.lua +++ b/widget/contrib/tp_smapi.lua @@ -6,7 +6,12 @@ --]] -local helpers = require("lain.helpers") +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") local focused = require("awful.screen").focused local naughty = require("naughty") local wibox = require("wibox") diff --git a/widget/cpu.lua b/widget/cpu.lua index 6c511158..5ba124dd 100644 --- a/widget/cpu.lua +++ b/widget/cpu.lua @@ -6,7 +6,12 @@ --]] -local helpers = require("lain.helpers") +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") local wibox = require("wibox") local math = math local string = string diff --git a/widget/fs.lua b/widget/fs.lua index b3a2dada..1b9cb9db 100644 --- a/widget/fs.lua +++ b/widget/fs.lua @@ -7,7 +7,12 @@ --]] -local helpers = require("lain.helpers") +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") local Gio = require("lgi").Gio local focused = require("awful.screen").focused local wibox = require("wibox") diff --git a/widget/imap.lua b/widget/imap.lua index e3f7baaa..00bb7d53 100644 --- a/widget/imap.lua +++ b/widget/imap.lua @@ -5,7 +5,12 @@ --]] -local helpers = require("lain.helpers") +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") local naughty = require("naughty") local wibox = require("wibox") local awful = require("awful") diff --git a/widget/init.lua b/widget/init.lua index 57b86bb9..065d81c2 100644 --- a/widget/init.lua +++ b/widget/init.lua @@ -11,9 +11,14 @@ --]] -local wrequire = require("lain.helpers").wrequire +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local wrequire = require(requirePrefix .. "helpers").wrequire local setmetatable = setmetatable -local widget = { _NAME = "lain.widget" } +local widget = { _NAME = requirePrefix .. "widget" } return setmetatable(widget, { __index = wrequire }) diff --git a/widget/mem.lua b/widget/mem.lua index 03184941..3ba16c66 100644 --- a/widget/mem.lua +++ b/widget/mem.lua @@ -6,7 +6,12 @@ --]] -local helpers = require("lain.helpers") +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") local wibox = require("wibox") local gmatch, lines, floor = string.gmatch, io.lines, math.floor diff --git a/widget/mpd.lua b/widget/mpd.lua index 55d3649b..9bb59c57 100644 --- a/widget/mpd.lua +++ b/widget/mpd.lua @@ -6,7 +6,12 @@ --]] -local helpers = require("lain.helpers") +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") local shell = require("awful.util").shell local escape_f = require("awful.util").escape local focused = require("awful.screen").focused diff --git a/widget/net.lua b/widget/net.lua index 9b7b165f..a3723c33 100644 --- a/widget/net.lua +++ b/widget/net.lua @@ -6,7 +6,12 @@ --]] -local helpers = require("lain.helpers") +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") local naughty = require("naughty") local wibox = require("wibox") local string = string diff --git a/widget/pulse.lua b/widget/pulse.lua index 69f4d706..e8bb0fcd 100644 --- a/widget/pulse.lua +++ b/widget/pulse.lua @@ -5,7 +5,12 @@ --]] -local helpers = require("lain.helpers") +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") local shell = require("awful.util").shell local wibox = require("wibox") local string = string diff --git a/widget/pulsebar.lua b/widget/pulsebar.lua index 19e73b96..8a63d22d 100644 --- a/widget/pulsebar.lua +++ b/widget/pulsebar.lua @@ -6,7 +6,12 @@ --]] -local helpers = require("lain.helpers") +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") local awful = require("awful") local naughty = require("naughty") local wibox = require("wibox") diff --git a/widget/sysload.lua b/widget/sysload.lua index 72605249..be1e1b53 100644 --- a/widget/sysload.lua +++ b/widget/sysload.lua @@ -6,7 +6,12 @@ --]] -local helpers = require("lain.helpers") +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") local wibox = require("wibox") local open, match = io.open, string.match diff --git a/widget/temp.lua b/widget/temp.lua index 99f87007..37421e72 100644 --- a/widget/temp.lua +++ b/widget/temp.lua @@ -5,7 +5,12 @@ --]] -local helpers = require("lain.helpers") +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") local wibox = require("wibox") local tonumber = tonumber diff --git a/widget/weather.lua b/widget/weather.lua index 93028b5c..1d958350 100644 --- a/widget/weather.lua +++ b/widget/weather.lua @@ -5,8 +5,13 @@ --]] -local helpers = require("lain.helpers") -local json = require("lain.util").dkjson +local requirePrefix = tostring(...):match(".*lain") or "" +if requirePrefix then + requirePrefix = requirePrefix .. "." +end + +local helpers = require(requirePrefix .. "helpers") +local json = require(requirePrefix .. "util").dkjson local focused = require("awful.screen").focused local naughty = require("naughty") local wibox = require("wibox")