changeset 24715:004b1c60daa9 v8.2.2896

patch 8.2.2896: spellfile functionality not fully tested Commit: https://github.com/vim/vim/commit/dc3275a1ac73b6c4d0c9d2e238ea80b477705b6f Author: Dominique Pelle <dominique.pelle@gmail.com> Date: Fri May 28 18:32:12 2021 +0200 patch 8.2.2896: spellfile functionality not fully tested Problem: Spellfile functionality not fully tested. Solution: Add tests for CHECKCOMPOUNDPATTERN and COMMON. (Dominique Pell?, closes #8270)
author Bram Moolenaar <Bram@vim.org>
date Fri, 28 May 2021 18:45:03 +0200
parents f74485889ed1
children 33f991b5be54
files src/testdir/test_spellfile.vim src/version.c
diffstat 2 files changed, 68 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_spellfile.vim
+++ b/src/testdir/test_spellfile.vim
@@ -842,6 +842,72 @@ func Test_spell_add_word()
   %bw!
 endfunc
 
+" Test CHECKCOMPOUNDPATTERN (see :help spell-CHECKCOMPOUNDPATTERN)
+func Test_spellfile_CHECKCOMPOUNDPATTERN()
+  call writefile(['4',
+        \         'one/c',
+        \         'two/c',
+        \         'three/c',
+        \         'four'], 'XtestCHECKCOMPOUNDPATTERN.dic')
+  " Forbid compound words where first word ends with 'wo' and second starts with 'on'.
+  call writefile(['CHECKCOMPOUNDPATTERN 1',
+        \         'CHECKCOMPOUNDPATTERN wo on',
+        \         'COMPOUNDFLAG c'], 'XtestCHECKCOMPOUNDPATTERN.aff')
+
+  let output = execute('mkspell! XtestCHECKCOMPOUNDPATTERN-utf8.spl XtestCHECKCOMPOUNDPATTERN')
+  set spell spelllang=XtestCHECKCOMPOUNDPATTERN-utf8.spl
+
+  " Check valid words with and without valid compounds.
+  for goodword in ['one', 'two', 'three', 'four',
+        \          'oneone', 'onetwo',  'onethree',
+        \          'twotwo', 'twothree',
+        \          'threeone', 'threetwo', 'threethree',
+        \          'onetwothree', 'onethreetwo', 'twothreeone', 'oneoneone']
+    call assert_equal(['', ''], spellbadword(goodword), goodword)
+  endfor
+
+  " Compounds 'twoone' or 'threetwoone' should be forbidden by CHECKCOMPOUNPATTERN.
+  " 'four' does not have the 'c' flag in *.aff file so no compound.
+  " 'five' is not in the *.dic file.
+  for badword in ['five', 'onetwox',
+        \         'twoone', 'threetwoone',
+        \         'fourone', 'onefour']
+    call assert_equal([badword, 'bad'], spellbadword(badword))
+  endfor
+
+  set spell& spelllang&
+  call delete('XtestCHECKCOMPOUNDPATTERN.dic')
+  call delete('XtestCHECKCOMPOUNDPATTERN.aff')
+  call delete('XtestCHECKCOMPOUNDPATTERN-utf8.spl')
+endfunc
+
+" Test COMMON (better suggestions with common words, see :help spell-COMMON)
+func Test_spellfile_COMMON()
+  call writefile(['7',
+        \         'and',
+        \         'ant',
+        \         'end',
+        \         'any',
+        \         'tee',
+        \         'the',
+        \         'ted'], 'XtestCOMMON.dic')
+  call writefile(['COMMON the and'], 'XtestCOMMON.aff')
+
+  let output = execute('mkspell! XtestCOMMON-utf8.spl XtestCOMMON')
+  set spell spelllang=XtestCOMMON-utf8.spl
+
+  " COMMON words 'and' and 'the' should be the top suggestions.
+  call assert_equal(['and', 'ant'], spellsuggest('anr', 2))
+  call assert_equal(['and', 'end'], spellsuggest('ond', 2))
+  call assert_equal(['the', 'ted'], spellsuggest('tha', 2))
+  call assert_equal(['the', 'tee'], spellsuggest('dhe', 2))
+
+  set spell& spelllang&
+  call delete('XtestCOMMON.dic')
+  call delete('XtestCOMMON.aff')
+  call delete('XtestCOMMON-utf8.spl')
+endfunc
+
 " When 'spellfile' is not set, adding a new good word will automatically set
 " the 'spellfile'
 func Test_init_spellfile()
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2896,
+/**/
     2895,
 /**/
     2894,