HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //home/ubuntu/neovim/test/functional/legacy/wordcount_spec.lua
-- Test for wordcount() function

local t = require('test.testutil')
local n = require('test.functional.testnvim')()

local feed, insert, source = n.feed, n.insert, n.source
local clear, command = n.clear, n.command
local eq, eval = t.eq, n.eval
local poke_eventloop = n.poke_eventloop

describe('wordcount', function()
  before_each(clear)

  it('is working', function()
    command('set selection=inclusive fileformat=unix fileformats=unix')

    insert([=[
      RESULT test:]=])
    poke_eventloop()

    command('new')
    source([=[
      function DoRecordWin(...)
        wincmd k
          if exists("a:1")
            call cursor(a:1)
          endif
          let result=[]
          call add(result, getline(1, '$'))
          call add(result, wordcount())
        wincmd j
        return result
      endfunction
    ]=])

    source([=[
      function PutInWindow(args)
        wincmd k
        %d _
        call append(1, a:args)
        wincmd j
      endfunction
    ]=])

    source([=[
      function! STL()
        if mode() =~? 'V'
          let g:visual_stat=wordcount()
        endif
        return string(wordcount())
      endfunction
    ]=])

    -- Test 1: empty window
    eq(
      eval([=[
          [[''], {'chars': 0, 'cursor_chars': 0, 'words': 0, 'cursor_words': 0, 'bytes': 0, 'cursor_bytes': 0}]
        ]=]),
      eval('DoRecordWin()')
    )

    -- Test 2: some words, cursor at start
    command([[call PutInWindow('one two three')]])
    eq(
      eval([=[
          [['', 'one two three'], {'chars': 15, 'cursor_chars': 1, 'words': 3, 'cursor_words': 0, 'bytes': 15, 'cursor_bytes': 1}]
        ]=]),
      eval('DoRecordWin([1, 1, 0])')
    )

    -- Test 3: some words, cursor at end
    command([[call PutInWindow('one two three')]])
    eq(
      eval([=[
          [['', 'one two three'], {'chars': 15, 'cursor_chars': 14, 'words': 3, 'cursor_words': 3, 'bytes': 15, 'cursor_bytes': 14}]
        ]=]),
      eval('DoRecordWin([2, 99, 0])')
    )

    -- Test 4: some words, cursor at end, ve=all
    command('set ve=all')
    command([[call PutInWindow('one two three')]])
    eq(
      eval([=[
          [['', 'one two three'], {'chars': 15, 'cursor_chars': 15, 'words': 3, 'cursor_words': 3, 'bytes': 15, 'cursor_bytes': 15}]
        ]=]),
      eval('DoRecordWin([2,99,0])')
    )
    command('set ve=')

    -- Test 5: several lines with words
    command([=[call PutInWindow(['one two three', 'one two three', 'one two three'])]=])
    eq(
      eval([=[
          [['', 'one two three', 'one two three', 'one two three'], {'chars': 43, 'cursor_chars': 42, 'words': 9, 'cursor_words': 9, 'bytes': 43, 'cursor_bytes': 42}]
        ]=]),
      eval('DoRecordWin([4,99,0])')
    )

    -- Test 6: one line with BOM set
    command([[call PutInWindow('one two three')]])
    command('wincmd k')
    command('set bomb')
    command('wincmd j')
    eq(
      eval([=[
          [['', 'one two three'], {'chars': 15, 'cursor_chars': 14, 'words': 3, 'cursor_words': 3, 'bytes': 18, 'cursor_bytes': 14}]
        ]=]),
      eval('DoRecordWin([2,99,0])')
    )
    command('wincmd k')
    command('set nobomb')
    command('wincmd j')

    -- Test 7: one line with multibyte words
    command([=[call PutInWindow(['Äne M¤ne Müh'])]=])
    eq(
      eval([=[
          [['', 'Äne M¤ne Müh'], {'chars': 14, 'cursor_chars': 13, 'words': 3, 'cursor_words': 3, 'bytes': 17, 'cursor_bytes': 16}]
        ]=]),
      eval('DoRecordWin([2,99,0])')
    )

    -- Test 8: several lines with multibyte words
    command([=[call PutInWindow(['Äne M¤ne Müh', 'und raus bist dü!'])]=])
    eq(
      eval([=[
          [['', 'Äne M¤ne Müh', 'und raus bist dü!'], {'chars': 32, 'cursor_chars': 31, 'words': 7, 'cursor_words': 7, 'bytes': 36, 'cursor_bytes': 35}]
        ]=]),
      eval('DoRecordWin([3,99,0])')
    )

    -- Test 9: visual mode, complete buffer
    command([=[call PutInWindow(['Äne M¤ne Müh', 'und raus bist dü!'])]=])
    command('wincmd k')
    command('set ls=2 stl=%{STL()}')
    -- -- Start visual mode quickly and select complete buffer.
    command('0')
    feed('V2jy<cr>')
    poke_eventloop()
    command('set stl= ls=1')
    command('let log=DoRecordWin([3,99,0])')
    command('let log[1]=g:visual_stat')
    eq(
      eval([=[
          [['', 'Äne M¤ne Müh', 'und raus bist dü!'], {'chars': 32, 'words': 7, 'bytes': 36, 'visual_chars': 32, 'visual_words': 7, 'visual_bytes': 36}]
        ]=]),
      eval('log')
    )

    -- Test 10: visual mode (empty)
    command([=[call PutInWindow(['Äne M¤ne Müh', 'und raus bist dü!'])]=])
    command('wincmd k')
    command('set ls=2 stl=%{STL()}')
    -- Start visual mode quickly and select complete buffer.
    command('0')
    feed('v$y<cr>')
    poke_eventloop()
    command('set stl= ls=1')
    command('let log=DoRecordWin([3,99,0])')
    command('let log[1]=g:visual_stat')
    eq(
      eval([=[
          [['', 'Äne M¤ne Müh', 'und raus bist dü!'], {'chars': 32, 'words': 7, 'bytes': 36, 'visual_chars': 1, 'visual_words': 0, 'visual_bytes': 1}]
        ]=]),
      eval('log')
    )

    -- Test 11: visual mode, single line
    command([=[call PutInWindow(['Äne M¤ne Müh', 'und raus bist dü!'])]=])
    command('wincmd k')
    command('set ls=2 stl=%{STL()}')
    -- Start visual mode quickly and select complete buffer.
    command('2')
    feed('0v$y<cr>')
    poke_eventloop()
    command('set stl= ls=1')
    command('let log=DoRecordWin([3,99,0])')
    command('let log[1]=g:visual_stat')
    eq(
      eval([=[
          [['', 'Äne M¤ne Müh', 'und raus bist dü!'], {'chars': 32, 'words': 7, 'bytes': 36, 'visual_chars': 13, 'visual_words': 3, 'visual_bytes': 16}]
        ]=]),
      eval('log')
    )
  end)
end)