Skip to content

Commit 07c143f

Browse files
chore: add unit tests for different code block settings
1 parent 739d845 commit 07c143f

File tree

4 files changed

+132
-24
lines changed

4 files changed

+132
-24
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
[7986be4](https://github.com/MeanderingProgrammer/render-markdown.nvim/commit/7986be47531d652e950776536987e01dd5b55b94)
1111
- checkbox: position [#140](https://github.com/MeanderingProgrammer/render-markdown.nvim/issues/140)
1212
[275f289](https://github.com/MeanderingProgrammer/render-markdown.nvim/commit/275f28943ab9ce6017f90bab56c5b5b3c651c269)
13+
- code: independent language padding: [#131](https://github.com/MeanderingProgrammer/render-markdown.nvim/pull/131)
14+
[739d845](https://github.com/MeanderingProgrammer/render-markdown.nvim/commit/739d8458d6c5742fbcf96a5961b88670fefa1d53)
1315

1416
### Bug Fixes
1517

@@ -25,6 +27,7 @@
2527
### Collaborator Shoutouts
2628

2729
- @P1roks
30+
- @Biggybi
2831

2932
## 6.1.0 (2024-08-11)
3033

tests/code_spec.lua

Lines changed: 114 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,43 @@
22

33
local util = require('tests.util')
44

5+
---@param row integer
6+
---@param col integer
7+
---@param win_col integer
8+
---@return render.md.MarkInfo
9+
local function hide_background(row, col, win_col)
10+
---@type render.md.MarkInfo
11+
return {
12+
row = { row },
13+
col = { col },
14+
virt_text = { { string.rep(' ', vim.opt.columns:get() * 2), 'Normal' } },
15+
virt_text_pos = 'win_col',
16+
virt_text_win_col = win_col,
17+
}
18+
end
19+
20+
---@param row integer
21+
---@param col integer
22+
---@param offset integer
23+
---@param left integer
24+
---@return render.md.MarkInfo
25+
local function padding(row, col, offset, left)
26+
local virt_text = {}
27+
if offset > 0 then
28+
table.insert(virt_text, { string.rep(' ', offset), 'Normal' })
29+
end
30+
if left > 0 then
31+
table.insert(virt_text, { string.rep(' ', left), util.hl('Code') })
32+
end
33+
---@type render.md.MarkInfo
34+
return {
35+
row = { row },
36+
col = { col },
37+
virt_text = virt_text,
38+
virt_text_pos = 'inline',
39+
}
40+
end
41+
542
describe('code.md', function()
643
it('default', function()
744
util.setup('tests/data/code.md')
@@ -10,25 +47,94 @@ describe('code.md', function()
1047

1148
vim.list_extend(expected, util.heading(row:get(), 1))
1249

50+
vim.list_extend(expected, {
51+
util.code_row(row:increment(2), 0),
52+
util.code_language(row:get(), 3, 7, 'rust'),
53+
})
54+
for _ = 1, 3 do
55+
table.insert(expected, util.code_row(row:increment(), 0))
56+
end
57+
table.insert(expected, util.code_below(row:increment(), 0))
58+
59+
vim.list_extend(expected, {
60+
util.bullet(row:increment(2), 0, 1),
61+
util.code_row(row:increment(2), 2),
62+
util.code_language(row:get(), 5, 8, 'lua'),
63+
})
64+
for _ = 1, 2 do
65+
table.insert(expected, util.code_row(row:increment(), 2))
66+
end
67+
table.insert(expected, util.code_below(row:increment(), 2))
68+
69+
vim.list_extend(expected, {
70+
util.bullet(row:increment(2), 0, 1),
71+
util.code_row(row:increment(2), 2),
72+
util.code_language(row:get(), 5, 8, 'lua'),
73+
})
74+
for _, col in ipairs({ 2, 0, 2 }) do
75+
table.insert(expected, util.code_row(row:increment(), col))
76+
if col == 0 then
77+
table.insert(expected, padding(row:get(), 0, 2, 0))
78+
end
79+
end
80+
table.insert(expected, util.code_below(row:increment(), 2))
81+
82+
local actual = util.get_actual_marks()
83+
util.marks_are_equal(expected, actual)
84+
end)
85+
86+
it('block padding', function()
87+
util.setup('tests/data/code.md', {
88+
code = { width = 'block', left_pad = 2, right_pad = 2 },
89+
})
90+
91+
local expected, row = {}, util.row()
92+
93+
vim.list_extend(expected, util.heading(row:get(), 1))
94+
95+
vim.list_extend(expected, {
96+
util.code_row(row:increment(2), 0),
97+
hide_background(row:get(), 0, 34),
98+
util.code_language(row:get(), 3, 7, 'rust'),
99+
})
100+
for _ = 1, 3 do
101+
vim.list_extend(expected, {
102+
util.code_row(row:increment(), 0),
103+
padding(row:get(), 0, 0, 2),
104+
hide_background(row:get(), 0, 34),
105+
})
106+
end
107+
table.insert(expected, util.code_below(row:increment(), 0, 34))
108+
13109
vim.list_extend(expected, {
14110
util.bullet(row:increment(2), 0, 1),
15111
util.code_row(row:increment(2), 2),
112+
hide_background(row:get(), 2, 20),
16113
util.code_language(row:get(), 5, 8, 'lua'),
17-
util.code_row(row:increment(), 2),
18-
util.code_row(row:increment(), 2),
19-
util.code_below(row:increment(), 2),
20114
})
115+
for _ = 1, 2 do
116+
vim.list_extend(expected, {
117+
util.code_row(row:increment(), 2),
118+
padding(row:get(), 2, 0, 2),
119+
hide_background(row:get(), 2, 20),
120+
})
121+
end
122+
table.insert(expected, util.code_below(row:increment(), 2, 20))
21123

22124
vim.list_extend(expected, {
23125
util.bullet(row:increment(2), 0, 1),
24126
util.code_row(row:increment(2), 2),
127+
hide_background(row:get(), 2, 20),
25128
util.code_language(row:get(), 5, 8, 'lua'),
26-
util.code_row(row:increment(), 2),
27-
util.code_row(row:increment(), 0),
28-
util.padding(row:get(), 2),
29-
util.code_row(row:increment(), 2),
30-
util.code_below(row:increment(), 2),
31129
})
130+
for _, col in ipairs({ 2, 0, 2 }) do
131+
vim.list_extend(expected, {
132+
util.code_row(row:increment(), col),
133+
padding(row:get(), col, 2 - col, 2),
134+
hide_background(row:get(), col, 20),
135+
})
136+
end
137+
table.insert(expected, util.code_below(row:increment(), 2, 20))
32138

33139
local actual = util.get_actual_marks()
34140
util.marks_are_equal(expected, actual)

tests/data/code.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Heading
22

3+
```rust
4+
fn main() {
5+
println!("Hello, World!");
6+
}
7+
```
8+
39
- Nested code
410

511
```lua

tests/util.lua

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ end
3535
---@field conceal? string
3636
---@field virt_text? { [1]: string, [2]: string|string[] }[]
3737
---@field virt_text_pos? string
38+
---@field virt_text_win_col? integer
3839
---@field virt_lines? { [1]: string, [2]: string }[][]
3940
---@field virt_lines_above? boolean
4041
---@field sign_text? string
@@ -138,14 +139,16 @@ end
138139
---@param row integer
139140
---@param start_col integer
140141
---@param end_col integer
141-
---@param name 'python'|'lua'
142+
---@param name 'python'|'lua'|'rust'
142143
---@return render.md.MarkInfo[]
143144
function M.code_language(row, start_col, end_col, name)
144145
local icon, highlight
145146
if name == 'python' then
146147
icon, highlight = '󰌠 ', 'MiniIconsYellow'
147148
elseif name == 'lua' then
148149
icon, highlight = '󰢱 ', 'MiniIconsAzure'
150+
elseif name == 'rust' then
151+
icon, highlight = '󱘗 ', 'MiniIconsOrange'
149152
end
150153
---@type render.md.MarkInfo
151154
local sign_mark = {
@@ -166,12 +169,14 @@ end
166169

167170
---@param row integer
168171
---@param col integer
169-
function M.code_below(row, col)
172+
---@param width? integer
173+
function M.code_below(row, col, width)
174+
width = (width or vim.opt.columns:get()) - col
170175
---@type render.md.MarkInfo
171176
return {
172177
row = { row },
173178
col = { col },
174-
virt_text = { { string.rep('', vim.opt.columns:get() - col), M.hl('_Inverse_' .. M.hl('Code')) } },
179+
virt_text = { { string.rep('', width), M.hl('_Inverse_' .. M.hl('Code')) } },
175180
virt_text_pos = 'overlay',
176181
}
177182
end
@@ -214,19 +219,6 @@ function M.quote(row, format, highlight)
214219
}
215220
end
216221

217-
---@param row integer
218-
---@param spaces integer
219-
---@return render.md.MarkInfo
220-
function M.padding(row, spaces)
221-
---@type render.md.MarkInfo
222-
return {
223-
row = { row },
224-
col = { 0 },
225-
virt_text = { { string.rep(' ', spaces), 'Normal' } },
226-
virt_text_pos = 'inline',
227-
}
228-
end
229-
230222
---@param row integer
231223
---@param col integer
232224
---@param head boolean
@@ -324,6 +316,7 @@ function M.get_actual_marks()
324316
conceal = details.conceal,
325317
virt_text = details.virt_text,
326318
virt_text_pos = details.virt_text_pos,
319+
virt_text_win_col = details.virt_text_win_col,
327320
virt_lines = details.virt_lines,
328321
virt_lines_above = details.virt_lines_above,
329322
sign_text = details.sign_text,

0 commit comments

Comments
 (0)