feat: track loc by day
This commit is contained in:
+71
-2
@@ -8,6 +8,30 @@ local function assert_equal(actual, expected, message)
|
||||
end
|
||||
end
|
||||
|
||||
local function json_encode(value)
|
||||
if vim.json and vim.json.encode then
|
||||
return vim.json.encode(value)
|
||||
end
|
||||
|
||||
return vim.fn.json_encode(value)
|
||||
end
|
||||
|
||||
local function json_decode(value)
|
||||
if vim.json and vim.json.decode then
|
||||
return vim.json.decode(value)
|
||||
end
|
||||
|
||||
return vim.fn.json_decode(value)
|
||||
end
|
||||
|
||||
local function read_json(path)
|
||||
return json_decode(table.concat(vim.fn.readfile(path), "\n"))
|
||||
end
|
||||
|
||||
local function write_json(path, value)
|
||||
vim.fn.writefile({ json_encode(value) }, path)
|
||||
end
|
||||
|
||||
local function assert_change(old, new, expected_added, expected_deleted)
|
||||
local added, deleted = loc._measure_change(old, new)
|
||||
|
||||
@@ -22,8 +46,23 @@ assert_change("hello", "hello world", 6, 0)
|
||||
assert_change("héllo", "hallo", 1, 1)
|
||||
assert_change("one\ntwo", "one\nthree", 4, 2)
|
||||
|
||||
local tmp = vim.fn.tempname()
|
||||
loc.setup({ auto_enable = false, data_path = tmp, save_delay_ms = 1 })
|
||||
local today = vim.fn.strftime("%Y-%m-%d")
|
||||
local old_day = "2000-01-01"
|
||||
|
||||
local daily_path = vim.fn.tempname()
|
||||
write_json(daily_path, {
|
||||
[today] = { added = 7, deleted = 2 },
|
||||
[old_day] = { added = 4, deleted = 1 },
|
||||
})
|
||||
|
||||
loc.setup({ auto_enable = false, data_path = daily_path, save_delay_ms = 1 })
|
||||
|
||||
local loaded_stats = loc.stats()
|
||||
assert_equal(loaded_stats.added, 7, "loaded daily added")
|
||||
assert_equal(loaded_stats.deleted, 2, "loaded daily deleted")
|
||||
assert_equal(loaded_stats.net, 5, "loaded daily net")
|
||||
assert_equal(loc.statusline(), "LOC +5", "daily statusline")
|
||||
|
||||
loc.reset()
|
||||
|
||||
local stats = loc.stats()
|
||||
@@ -31,4 +70,34 @@ assert_equal(stats.added, 0, "reset added")
|
||||
assert_equal(stats.deleted, 0, "reset deleted")
|
||||
assert_equal(loc.statusline(), "LOC +0", "statusline")
|
||||
|
||||
local daily = read_json(daily_path)
|
||||
assert_equal(daily[today].added, 0, "reset today added on disk")
|
||||
assert_equal(daily[today].deleted, 0, "reset today deleted on disk")
|
||||
assert_equal(daily[old_day].added, 4, "reset preserves old day added")
|
||||
assert_equal(daily[old_day].deleted, 1, "reset preserves old day deleted")
|
||||
|
||||
local change_path = vim.fn.tempname()
|
||||
loc.setup({ auto_enable = false, data_path = change_path, save_delay_ms = 1 })
|
||||
loc.enable()
|
||||
|
||||
local bufnr = vim.api.nvim_create_buf(false, true)
|
||||
vim.api.nvim_set_current_buf(bufnr)
|
||||
vim.api.nvim_buf_set_lines(bufnr, 0, -1, true, { "a" })
|
||||
vim.api.nvim_exec_autocmds("InsertEnter", { buffer = bufnr })
|
||||
vim.api.nvim_buf_set_lines(bufnr, 0, -1, true, { "abc" })
|
||||
vim.api.nvim_exec_autocmds("TextChangedI", { buffer = bufnr })
|
||||
|
||||
local changed_stats = loc.stats()
|
||||
assert_equal(changed_stats.added, 2, "tracked edit added")
|
||||
assert_equal(changed_stats.deleted, 0, "tracked edit deleted")
|
||||
|
||||
loc.save()
|
||||
loc.disable()
|
||||
vim.wait(20)
|
||||
vim.api.nvim_buf_delete(bufnr, { force = true })
|
||||
|
||||
local changed = read_json(change_path)
|
||||
assert_equal(changed[today].added, 2, "tracked edit saved today added")
|
||||
assert_equal(changed[today].deleted, 0, "tracked edit saved today deleted")
|
||||
|
||||
print("loc.nvim tests passed")
|
||||
|
||||
Reference in New Issue
Block a user