From 33c848f81384158b0540ffa3dcbbced38514f1b0 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Sat, 4 Mar 2017 21:08:14 +0100 Subject: [PATCH] MenuSorter: first unit tests --- frontend/ui/menusorter.lua | 4 +- spec/unit/menusorter_spec.lua | 89 +++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 spec/unit/menusorter_spec.lua diff --git a/frontend/ui/menusorter.lua b/frontend/ui/menusorter.lua index f30668518..5f613e0cc 100644 --- a/frontend/ui/menusorter.lua +++ b/frontend/ui/menusorter.lua @@ -10,6 +10,7 @@ local _ = require("gettext") local MenuSorter = { menu_table = {}, + orphaned_prefix = _("NEW: "), separator = { id = "----------------------------", text = "KOMenu:separator", @@ -171,7 +172,8 @@ function MenuSorter:magic(item_table, order) DEBUG(k) -- normally there should be menu text but check to be sure if v.text and v.new ~= true then - v.text = _("NEW: ") .. v.text + v.id = k + v.text = self.orphaned_prefix .. v.text -- prevent text being prepended to item on menu reload, i.e., on switching between reader and filemanager v.new = true end diff --git a/spec/unit/menusorter_spec.lua b/spec/unit/menusorter_spec.lua new file mode 100644 index 000000000..faf2469f0 --- /dev/null +++ b/spec/unit/menusorter_spec.lua @@ -0,0 +1,89 @@ +describe("MenuSorter module", function() + local MenuSorter + setup(function() + require("commonrequire") + MenuSorter = require("ui/menusorter") + end) + + it("should put menu items in the defined order", function() + local menu_items = { + ["KOMenu:menu_buttons"] = {}, + main = {}, + search = {}, + tools = {}, + setting = {}, + } + local order = { + ["KOMenu:menu_buttons"] = { + "setting", + "tools", + "search", + "main", + }, + main = {}, + search = {}, + tools = {}, + setting = {}, + } + + local test_menu = MenuSorter:sort(menu_items, order) + + assert(test_menu[1].id == "setting") + assert(test_menu[2].id == "tools") + assert(test_menu[3].id == "search") + assert(test_menu[4].id == "main") + end) + it("should attach submenus correctly", function() + local menu_items = { + ["KOMenu:menu_buttons"] = {}, + first = {}, + second = {}, + third1 = {}, + third2 = {}, + } + local order = { + ["KOMenu:menu_buttons"] = {"first",}, + first = {"second"}, + second = {"third1", "third2"}, + } + + local test_menu = MenuSorter:sort(menu_items, order) + + assert(test_menu[1].id == "first") + assert(test_menu[1][1].id == "second") + assert(test_menu[1][2][1].id == "third1") + assert(test_menu[1][2][2].id == "third2") + end) + it("should put orphans in the first menu", function() + local menu_items = { + ["KOMenu:menu_buttons"] = {}, + main = {text="Main"}, + search = {text="Search"}, + tools = {text="Tools"}, + setting = {text="Settings"}, + } + local order = { + ["KOMenu:menu_buttons"] = { + "setting", + }, + setting = {}, + } + + local test_menu = MenuSorter:sort(menu_items, order) + + -- all three should be in the first menu + assert(#test_menu[1] == 3) + for _, menu_item in ipairs(test_menu[1]) do + -- it hsould have an id + assert(type(menu_item.id) == "string") + -- it should have NEW: prepended + assert(string.sub(menu_item.text,1,string.len(MenuSorter.orphaned_prefix))==MenuSorter.orphaned_prefix) + end + end) + it("should attach separator=true to previous item", function() + + end) + it("should compress menus when items from order are missing", function() + + end) +end)