local activity = require "activity" local dates = require "activity.dates" 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, activity.generate_table(2024, always_zero, plain)) end) it("2023", function() assert.are.equal(Y2023, activity.generate_table(2023, always_zero, plain)) end) it("2020", function() assert.are.equal(Y2020, activity.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"), activity.generate_table(2023, lookup, plain)) end) it("leap years", function() assert.are.equal(Y2024:gsub("0", "1"), activity.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, activity.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"), activity.generate_table("rolling", lookup, plain, date)) end) end)