aboutsummaryrefslogtreecommitdiff
path: root/util_test.lua
blob: 99f34f02614859d1751a44926171de0a47fe85d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/usr/bin/env lua5.4

-- mock vis global
vis = {} -- luacheck: ignore 111
local util = require('util')

local lunatest = require('lunatest')

function test_dirname() -- luacheck: ignore 111
  lunatest.assert_equal('/usr', util.dirname('/usr/lib'))
  lunatest.assert_equal('/', util.dirname('/usr/'))
  lunatest.assert_equal('.', util.dirname('usr'))
  lunatest.assert_equal('.', util.dirname('.'))
  lunatest.assert_equal('..', util.dirname('..'))
  lunatest.assert_equal('/', util.dirname('/'))
end

function test_visual_chars_in_line() -- luacheck: ignore 111
  local win = {options = {tabwidth = 4}} -- win mock
  local s = '\tfo' -- visual chars == 6
  lunatest.assert_equal(util.visual_chars_in_line(win, s, #s), 6)

  s = 'f\tfo' -- visual chars == 6
  lunatest.assert_equal(util.visual_chars_in_line(win, s, #s), 6)

  s = 'fo\tfo' -- visual chars == 6
  lunatest.assert_equal(util.visual_chars_in_line(win, s, #s), 6)

  s = 'foo\tfo' -- visual chars == 6
  lunatest.assert_equal(util.visual_chars_in_line(win, s, #s), 6)
end

function test_table_deep_copy() -- luacheck: ignore 111
  local t = {1, 2, 3, foo = {4, 5, bar = 'bar'}}
  local cpy = util.table.deep_copy(t)

  lunatest.assert_table(cpy)
  lunatest.assert_len(3, cpy)
  lunatest.assert_table(cpy.foo)
  lunatest.assert_len(2, cpy.foo)
  for i, v in ipairs(t) do
    lunatest.assert_equal(v, cpy[i])
  end

  t[2] = 12
  lunatest.assert_not_equal(t[2], cpy[2])
  t.foo[2] = 13
  lunatest.assert_not_equal(t.foo[2], cpy.foo[2])
end

function test_table_merge() -- luacheck: ignore 111
  local t = {1, 2, foo = {bar = {nose = 'nose'}}}
  local t2 = {3, foo = {4, 5, bar = {bar = 'bar'}}}
  lunatest.assert_table(t)
  lunatest.assert_table(t2)

  util.table.merge(t, t2)

  lunatest.assert_table(t)
  lunatest.assert_len(3, t)

  lunatest.assert_equal(1, t[1])
  lunatest.assert_equal(2, t[2])
  lunatest.assert_equal(3, t[3])

  lunatest.assert_table(t.foo)
  lunatest.assert_len(2, t.foo)

  lunatest.assert_equal(t[3], t2[1])
  lunatest.assert_equal(t[2], 2)

  lunatest.assert_equal(t.foo.bar.bar, 'bar')
  lunatest.assert_equal(t.foo.bar.nose, 'nose')
end

function test_style_define() -- luacheck: ignore 111
  -- Modern vis: vis.ui.style_define present
  vis.API = 0
  vis.ui = {
    style_define = function(self, id, style)
      return id == 1 and style == 'fore:red'
    end,
  }
  lunatest.assert_true(util.style_define(1, 'fore:red'))

  -- Modern vis: vis.API > 3215
  vis.API = 3216
  lunatest.assert_true(util.style_define(1, 'fore:red'))

  -- Older vis: fallback with explicit win
  vis.API = nil
  vis.ui = nil
  local win = {
    style_define = function(self, id, style)
      return id == 2 and style == 'fore:blue'
    end,
  }
  lunatest.assert_true(util.style_define(2, 'fore:blue', win))

  -- Older vis: fallback with vis.win
  vis.win = win
  lunatest.assert_true(util.style_define(2, 'fore:blue'))
  vis.win = nil
end

lunatest.run()