local ftext = require("MDK.ftext") describe("ftext:", function() describe("ftext.fText:", function() local fText = ftext.fText it("Should properly center text", function() local expected = " some text " local actual = fText("some text", {width = 20}) assert.equals(expected, actual) assert.equals(20, actual:len()) end) it("Should properly pad left aligned text", function() local expected = "some text " local actual = fText("some text", {width = 20, alignment = "left"}) assert.equals(expected, actual) assert.equals(20, actual:len()) end) it("Should properly pad right aligned text", function() local expected = " some text" local actual = fText("some text", {width = 20, alignment = "right"}) assert.equals(expected, actual) assert.equals(20, actual:len()) end) it("Should wrap lines to the correct length", function() local str = "This is a test of the emergency broadcast system. This is only a test" local options = {width = 10, alignment = "centered"} local actual = fText(str, options) for _, line in ipairs(actual:split("\n")) do assert.equals(line:len(), 10) end options.width = 15 actual = fText(str, options) for _, line in ipairs(actual:split("\n")) do assert.equals(line:len(), 15) end end) describe("non-space spacer character:", function() local str = "some text" local options = {width = "20", alignment = "left", spacer = "="} it("Should work with left align", function() local expected = "some text ==========" local actual = fText(str, options) assert.equals(expected, actual) assert.equals(20, actual:len()) end) it("Should work with right align", function() local expected = "========== some text" options.alignment = "right" local actual = fText(str, options) assert.equals(expected, actual) assert.equals(20, actual:len()) end) it("Should work with center align", function() local expected = ("==== some text =====") options.alignment = "center" local actual = fText(str, options) assert.equals(expected, actual) assert.equals(20, actual:len()) end) end) describe("nogap option:", function() local str = "some text" local options = {width = "20", alignment = "left", spacer = "=", nogap = true} it("Should work with left align", function() local expected = "some text===========" local actual = fText(str, options) assert.equals(expected, actual) assert.equals(20, actual:len()) end) it("Should work with right align", function() local expected = "===========some text" options.alignment = "right" local actual = fText(str, options) assert.equals(expected, actual) assert.equals(20, actual:len()) end) it("Should work with center align", function() local expected = "=====some text======" options.alignment = "center" local actual = fText(str, options) assert.equals(expected, actual) assert.equals(20, actual:len()) end) end) describe("cap functionality", function() local str = "some text" local options = {width = 20, spacer = "=", cap = "|"} it("Should place the spacer outside the cap by default", function() local expected = "===| some text |====" local actual = fText(str, options) assert.equals(expected, actual) assert.equals(20, actual:len()) end) it("Should place it inside the cap if inside option is true", function() local expected = "|=== some text ====|" options.inside = true local actual = fText(str, options) options.inside = nil assert.equals(expected, actual) assert.equals(20, actual:len()) end) it("Should mirror certain characters with their opposites", function() local expected = "===[ some text ]====" options.mirror = true options.cap = "[" local actual = fText(str, options) assert.equals(expected, actual) options.inside = true expected = "[=== some text ====]" actual = fText(str, options) assert.equals(expected, actual) options.inside = nil options.cap = "<" expected = "===< some text >====" actual = fText(str, options) assert.equals(expected, actual) options.cap = "{" expected = "==={ some text }====" actual = fText(str, options) assert.equals(expected, actual) options.cap = "(" expected = "===( some text )====" actual = fText(str, options) assert.equals(expected, actual) options.cap = "|" expected = "===| some text |====" actual = fText(str, options) assert.equals(expected, actual) end) end) end) describe("ftext.cfText", function() local cfText = ftext.cfText local str = "some text" local options = { width = 20, spacer = "=", cap = "[", inside = true, mirror = true, capColor = "", spacerColor = "", textColor = "", } it("Should handle cecho colored text", function() local expectedStripped = "[=== some text ====]" local expected = "[=== some text ====]" local actual = cfText(str, options) local actualStripped = cecho2string(actual) assert.equals(expected, actual) assert.equals(expectedStripped, actualStripped) assert.equals(20, actualStripped:len()) expectedStripped = "===[ some text ]====" expected = "===[ some text ]====" options.inside = false actual = cfText(str, options) actualStripped = cecho2string(actual) assert.equals(expected, actual) assert.equals(expectedStripped, actualStripped) assert.equals(20, actualStripped:len()) end) it("Should wrap cecho lines to the correct length", function() local str = "This is a test of the emergency broadcast system. This is only a test" local options = {width = 10, alignment = "centered"} local actual = cfText(str, options) for _, line in ipairs(actual:split("\n")) do assert.equals(cecho2string(line):len(), 10) end options.width = 15 actual = cfText(str, options) for _, line in ipairs(actual:split("\n")) do assert.equals(cecho2string(line):len(), 15) end end) end) describe("ftext.dfText", function() local dfText = ftext.dfText local str = "some text" local options = { width = 20, spacer = "=", cap = "[", inside = true, mirror = true, capColor = "<160,32,240>", spacerColor = "<0,255,0>", textColor = "<255,0,0>", } it("Should handle decho colored text", function() local expectedStripped = "[=== some text ====]" local expected = "<160,32,240>[<0,255,0>===<255,0,0> some text <0,255,0>====<160,32,240>]" local actual = dfText(str, options) local actualStripped = decho2string(actual) assert.equals(expected, actual) assert.equals(expectedStripped, actualStripped) assert.equals(20, actualStripped:len()) expectedStripped = "===[ some text ]====" expected = "<0,255,0>===<160,32,240>[<255,0,0> some text <160,32,240>]<0,255,0>====" options.inside = false actual = dfText(str, options) actualStripped = decho2string(actual) assert.equals(expected, actual) assert.equals(expectedStripped, actualStripped) assert.equals(20, actualStripped:len()) end) it("Should wrap decho lines to the correct length", function() local str = "This is a test of the emergency broadcast system. This is only a test" local options = {width = 10, alignment = "centered"} local actual = dfText(str, options) for _, line in ipairs(actual:split("\n")) do assert.equals(decho2string(line):len(), 10) end options.width = 15 actual = dfText(str, options) for _, line in ipairs(actual:split("\n")) do assert.equals(decho2string(line):len(), 15) end end) end) describe("ftext.hfText", function() local hfText = ftext.hfText local str = "some text" local options = { width = 20, spacer = "=", cap = "[", inside = true, mirror = true, capColor = "#a020f0", spacerColor = "#00ff00", textColor = "#ff0000", } it("Should handle hecho colored text", function() local expectedStripped = "[=== some text ====]" local expected = "#a020f0[#r#00ff00===#r#ff0000 some text #r#00ff00====#r#a020f0]#r" local actual = hfText(str, options) local actualStripped = hecho2string(actual) assert.equals(expected, actual) assert.equals(expectedStripped, actualStripped) assert.equals(20, actualStripped:len()) expectedStripped = "===[ some text ]====" expected = "#00ff00===#r#a020f0[#r#ff0000 some text #r#a020f0]#r#00ff00====#r" options.inside = false actual = hfText(str, options) actualStripped = hecho2string(actual) assert.equals(expected, actual) assert.equals(expectedStripped, actualStripped) assert.equals(20, actualStripped:len()) end) it("Should wrap hecho lines to the correct length", function() local str = "This is a test of the emergency broadcast system. This is only a test" local options = {width = 10, alignment = "centered"} local actual = hfText(str, options) for _, line in ipairs(actual:split("\n")) do assert.equals(hecho2string(line):len(), 10) end options.width = 15 actual = hfText(str, options) for _, line in ipairs(actual:split("\n")) do assert.equals(hecho2string(line):len(), 15) end end) end) describe("ftext.TextFormatter", function() local tf = ftext.TextFormatter local str = "some text" local formatter before_each(function() formatter = tf:new({width = 20}) end) it("Should let you change width using :setWidth", function() formatter:setWidth(80) local expected = " some text " local actual = formatter:format(str) assert.equals(expected, actual) assert.equals(80, cecho2string(actual):len()) end) it("Should format for cecho by default", function() local expected = " some text " local expectedStripped = " some text " local actual = formatter:format(str) local actualStripped = cecho2string(actual) assert.equals(expected, actual) assert.equals(expectedStripped, actualStripped) assert.equals(20, actualStripped:len()) end) it("Should produce the same line as cfText given the same options", function() local expected = ftext.cfText(str, formatter.options) local actual = formatter:format(str) assert.equals(expected, actual) end) it("Should let you change type using :setType", function() formatter:setType("h") local expected = ftext.hfText(str, formatter.options) local actual = formatter:format(str) assert.equals(expected, actual) formatter:setType("d") expected = ftext.dfText(str, formatter.options) actual = formatter:format(str) assert.equals(expected, actual) formatter:setType("") expected = ftext.fText(str, formatter.options) actual = formatter:format(str) assert.equals(expected, actual) end) it("Should default to word wrapping, and let you change it with :setWrap", function() formatter:setWidth(10) local expected = " some \n text " local actual = formatter:format(str) assert.equals(expected, actual) expected = " some text " formatter:setWrap(false) actual = formatter:format(str) assert.equals(expected, actual) end) it("Should allow you to change the cap using :setCap", function() formatter:setCap('|') local expected = "| some text |" local actual = formatter:format(str) assert.equals(expected, actual) end) it("Should allow you to change the capColor using :setCapColor", function() formatter:setCapColor('') local expected = " some text " local actual = formatter:format(str) assert.equals(expected, actual) end) it("Should allow you to change the spacer color using :setSpacerColor", function() formatter:setSpacerColor("") local expected = " some text " local actual = formatter:format(str) assert.equals(expected, actual) end) it("Should allow you to change the text color using :setTextColor", function() formatter:setTextColor("") local expected = " some text " local actual = formatter:format(str) assert.equals(expected, actual) end) it("Should allow you to change the spacer using :setSpacer", function() formatter:setSpacer("=") -- local expected = " some text " local expected = "==== some text =====" local actual = formatter:format(str) assert.equals(expected, actual) end) it("Should allow you to set the alignment using :setAlignment", function() formatter:setAlignment("left") local expected = "some text " local actual = formatter:format(str) assert.equals(expected, actual) formatter:setAlignment("right") expected = " some text" actual = formatter:format(str) assert.equals(expected, actual) end) it("Should allow you to change the 'inside' option using :setInside", function() formatter:setInside(false) local expected = " some text " local actual = formatter:format(str) assert.equals(expected, actual) end) it("Should allow you to change the mirror option using :setMirror", function() formatter:setCap('<') formatter:setMirror(true) local expected = "< some text >" local actual = formatter:format(str) assert.equal(expected, actual) end) end) describe("ftext.TableMaker", function() local TableMaker = ftext.TableMaker local tm before_each(function() tm = TableMaker:new() tm:addColumn({name = "col1", width = 15, textColor = ""}) tm:addColumn({name = "col2", width = 15, textColor = ""}) tm:addColumn({name = "col3", width = 15, textColor = ""}) tm:addRow({"some text", "more text", "other text"}) tm:addRow({"little text", "bigger text", "text"}) end) it("Should assemble a formatted table given default options", function() local expected = [[************************************************* * col1 | col2 | col3 * *---------------|---------------|---------------* * some text | more text | other text * *---------------|---------------|---------------* * little text | bigger text | text * ************************************************* ]] local actual = tm:assemble() assert.equals(expected, actual) end) it("TableMaker:getCell should return the text and formatter for a specific cell", function() local expectedText = "more text" local expectedFormatter = tm.columns[2] local actualText, actualFormatter = tm:getCell(1, 2) assert.equals(expectedText, actualText) assert.equals(expectedFormatter, actualFormatter) local expectedFormatted = " more text " local actualFormatted = actualFormatter:format(actualText) assert.equals(expectedFormatted, actualFormatted) end) end) end)