aboutsummaryrefslogtreecommitdiff
path: root/test/functional/ui/options_spec.lua
blob: 7ce21f5d76aafbd1791efdc89252c121241e6e41 (plain) (blame)
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
local global_helpers = require('test.helpers')
local helpers = require('test.functional.helpers')(after_each)
local Screen = require('test.functional.ui.screen')
local clear = helpers.clear
local command = helpers.command
local eq = helpers.eq
local shallowcopy = global_helpers.shallowcopy

describe('ui receives option updates', function()
  local screen

  local function reset(opts, ...)
    local defaults = {
      ambiwidth='single',
      arabicshape=true,
      emoji=true,
      guifont='',
      guifontset='',
      guifontwide='',
      linespace=0,
      pumblend=0,
      showtabline=1,
      termguicolors=false,
      ext_cmdline=false,
      ext_popupmenu=false,
      ext_tabline=false,
      ext_wildmenu=false,
      ext_linegrid=false,
      ext_hlstate=false,
      ext_multigrid=false,
      ext_messages=false,
      ext_termcolors=false,
    }

    clear(...)
    screen = Screen.new(20,5)
    screen:attach(opts)
    -- NB: UI test suite can be run in both "linegrid" and legacy grid mode.
    -- In both cases check that the received value is the one requested.
    defaults.ext_linegrid = screen._options.ext_linegrid or false
    return defaults
  end

  after_each(function()
    screen:detach()
  end)

  it("for defaults", function()
    local expected = reset()
    screen:expect(function()
      eq(expected, screen.options)
    end)
  end)

  it("when setting options", function()
    local expected = reset()
    local defaults = shallowcopy(expected)

    command("set termguicolors")
    expected.termguicolors = true
    screen:expect(function()
      eq(expected, screen.options)
    end)

    command("set guifont=Comic\\ Sans")
    expected.guifont = "Comic Sans"
    screen:expect(function()
      eq(expected, screen.options)
    end)

    command("set showtabline=0")
    expected.showtabline = 0
    screen:expect(function()
      eq(expected, screen.options)
    end)

    command("set linespace=13")
    expected.linespace = 13
    screen:expect(function()
      eq(expected, screen.options)
    end)

    command("set linespace=-11")
    expected.linespace = -11
    screen:expect(function()
      eq(expected, screen.options)
    end)

    command("set all&")
    screen:expect(function()
      eq(defaults, screen.options)
    end)
  end)

  it('with UI extensions', function()
    local expected = reset({ext_cmdline=true, ext_wildmenu=true})

    expected.ext_cmdline = true
    expected.ext_wildmenu = true
    screen:expect(function()
      eq(expected, screen.options)
    end)

    screen:set_option('ext_popupmenu', true)
    expected.ext_popupmenu = true
    screen:expect(function()
      eq(expected, screen.options)
    end)

    screen:set_option('ext_wildmenu', false)
    expected.ext_wildmenu = false
    screen:expect(function()
      eq(expected, screen.options)
    end)
  end)

  local function startup_test(headless)
    local expected = reset(nil, {args_rm=(headless and {} or {'--headless'}),
                                 args={'--cmd', 'set guifont=Comic\\ Sans\\ 12'}})
    expected.guifont = "Comic Sans 12"
    screen:expect(function()
      eq(expected, screen.options)
    end)
  end

  it('from startup options with --headless', function() startup_test(true) end)
  it('from startup options with --embed', function() startup_test(false) end)
end)