neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

syn_attr_spec.lua (2235B)


      1 local t = require('test.testutil')
      2 local n = require('test.functional.testnvim')()
      3 
      4 local clear = n.clear
      5 local command = n.command
      6 local eq = t.eq
      7 local eval = n.eval
      8 
      9 -- oldtest: Test_missing_attr()
     10 describe('synIDattr()', function()
     11  setup(clear)
     12 
     13  local bool_attrs = {
     14    'bold',
     15    'italic',
     16    'reverse',
     17    'standout',
     18    'underline',
     19    'undercurl',
     20    'underdouble',
     21    'underdotted',
     22    'underdashed',
     23    'strikethrough',
     24    'nocombine',
     25  }
     26 
     27  describe(':hi Mine cterm=NONE gui=NONE', function()
     28    setup(function()
     29      command(':hi Mine cterm=NONE gui=NONE')
     30    end)
     31 
     32    it('"name"', function()
     33      eq('Mine', eval([[synIDattr(hlID("Mine"), "name")]]))
     34    end)
     35 
     36    local function none_test(attr, mode)
     37      it(('"%s"'):format(attr), function()
     38        eq('', eval(([[synIDattr(hlID("Mine"), "%s", '%s')]]):format(attr, mode)))
     39      end)
     40    end
     41 
     42    for _, mode in ipairs({ 'cterm', 'gui' }) do
     43      describe(('"%s"'):format(mode), function()
     44        for _, attr in ipairs(bool_attrs) do
     45          none_test(attr, mode)
     46        end
     47        for _, attr in ipairs({ 'inverse', 'bg', 'fg', 'sp' }) do
     48          none_test(attr, mode)
     49        end
     50      end)
     51    end
     52  end)
     53 
     54  local function attr_test(attr1, attr2)
     55    local cmd = (':hi Mine cterm=%s gui=%s'):format(attr1, attr2)
     56    it(cmd, function()
     57      command(cmd)
     58      eq('1', eval(([[synIDattr("Mine"->hlID(), "%s", 'cterm')]]):format(attr1)))
     59      eq('', eval(([[synIDattr(hlID("Mine"), "%s", 'cterm')]]):format(attr2)))
     60      eq('', eval(([[synIDattr("Mine"->hlID(), "%s", 'gui')]]):format(attr1)))
     61      eq('1', eval(([[synIDattr(hlID("Mine"), "%s", 'gui')]]):format(attr2)))
     62    end)
     63  end
     64 
     65  for i, attr1 in ipairs(bool_attrs) do
     66    local attr2 = bool_attrs[i - 1] or bool_attrs[#bool_attrs]
     67    attr_test(attr1, attr2)
     68    attr_test(attr2, attr1)
     69  end
     70 
     71  it(':hi Mine cterm=reverse gui=inverse', function()
     72    command(':hi Mine cterm=reverse gui=inverse')
     73    eq('1', eval([[synIDattr(hlID("Mine"), "reverse", 'cterm')]]))
     74    eq('1', eval([[synIDattr(hlID("Mine"), "inverse", 'cterm')]]))
     75    eq('1', eval([[synIDattr(hlID("Mine"), "reverse", 'gui')]]))
     76    eq('1', eval([[synIDattr(hlID("Mine"), "inverse", 'gui')]]))
     77  end)
     78 end)