summaryrefslogtreecommitdiff
path: root/spec/generators_spec.lua
diff options
context:
space:
mode:
Diffstat (limited to 'spec/generators_spec.lua')
-rw-r--r--spec/generators_spec.lua108
1 files changed, 108 insertions, 0 deletions
diff --git a/spec/generators_spec.lua b/spec/generators_spec.lua
new file mode 100644
index 0000000..a6c1e9a
--- /dev/null
+++ b/spec/generators_spec.lua
@@ -0,0 +1,108 @@
+local dates = require "activity.dates"
+local generators = require "activity.generators"
+local plain = require "activity.formats.plain"
+
+local Y2024 = [[
+ _0000000000000000000000000000000000000000000000000000
+Mon 00000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000
+Wed 0000000000000000000000000000000000000000000000000000_
+ 0000000000000000000000000000000000000000000000000000_
+Fri 0000000000000000000000000000000000000000000000000000_
+ 0000000000000000000000000000000000000000000000000000_
+]]
+
+local Y2023 = [[
+ 00000000000000000000000000000000000000000000000000000
+Mon 0000000000000000000000000000000000000000000000000000_
+ 0000000000000000000000000000000000000000000000000000_
+Wed 0000000000000000000000000000000000000000000000000000_
+ 0000000000000000000000000000000000000000000000000000_
+Fri 0000000000000000000000000000000000000000000000000000_
+ 0000000000000000000000000000000000000000000000000000_
+]]
+
+local Y2020 = [[
+ _0000000000000000000000000000000000000000000000000000
+Mon _0000000000000000000000000000000000000000000000000000
+ _0000000000000000000000000000000000000000000000000000
+Wed 00000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000
+Fri 0000000000000000000000000000000000000000000000000000_
+ 0000000000000000000000000000000000000000000000000000_
+]]
+
+local ROLL = [[
+ 00000000000000000000000000000000000000000000000000000
+Mon 00000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000
+Wed 00000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000
+Fri 0000000000000000000000000000000000000000000000000000_
+ 0000000000000000000000000000000000000000000000000000_
+]]
+
+
+local
+function always_zero (...)
+ return 0
+end
+
+
+describe("Yearly chart generator", function()
+ describe("shall generate empty table for year", function()
+ it("2024", function()
+ assert.are.equal(Y2024, generators.generate_table(2024, always_zero, plain))
+ end)
+
+ it("2023", function()
+ assert.are.equal(Y2023, generators.generate_table(2023, always_zero, plain))
+ end)
+
+ it("2020", function()
+ assert.are.equal(Y2020, generators.generate_table(2020, always_zero, plain))
+ end)
+
+ end)
+
+ describe("shall put activity into cells for", function()
+ local function lookup (year, day)
+ if day < 1 or dates.days_in(year) < day then
+ return 0
+ end
+ return 1
+ end
+
+ it("regular years", function()
+ assert.are.equal(Y2023:gsub("0", "1"), generators.generate_table(2023, lookup, plain))
+ end)
+
+ it("leap years", function()
+ assert.are.equal(Y2024:gsub("0", "1"), generators.generate_table(2024, lookup, plain))
+ end)
+ end)
+end)
+
+
+describe("Rolling chart generator", function()
+ it("shall generate empty table", function()
+ local date = os.date("*t", os.time{year=2024, month=2, day=8})
+ assert.are.equal(ROLL, generators.generate_table("rolling", always_zero, plain, date))
+ end)
+
+ it("shall put activity into cells", function()
+ local date = os.date("*t", os.time{year=2024, month=2, day=8})
+
+ local function lookup (year, day)
+ if year == 2023 and day >= 36 then
+ return 1
+ end
+ if year == 2024 and day <= 39 then
+ return 1
+ end
+ return 0
+ end
+
+ assert.are.equal(ROLL:gsub("0", "1"), generators.generate_table("rolling", lookup, plain, date))
+ end)
+end)