16b0e5283SBram Moolenaar" Test to verify that the three function lists,
26b0e5283SBram Moolenaar"
36b0e5283SBram Moolenaar"   global_functions[] in src/evalfunc.c
46b0e5283SBram Moolenaar"   *functions* in runtime/doc/eval.txt
56b0e5283SBram Moolenaar"   *function-list* in runtime/doc/usr_41.txt
66b0e5283SBram Moolenaar"
76b0e5283SBram Moolenaar" contain the same functions and that the global_functions and ":help
86b0e5283SBram Moolenaar" functions" lists are in ASCII order.
96b0e5283SBram Moolenaar
106b0e5283SBram Moolenaarfunc Test_function_lists()
116b0e5283SBram Moolenaar
126b0e5283SBram Moolenaar  " Delete any files left over from an earlier run of this test.
136b0e5283SBram Moolenaar
146b0e5283SBram Moolenaar  call delete("Xglobal_functions.diff")
156b0e5283SBram Moolenaar  call delete("Xfunctions.diff")
166b0e5283SBram Moolenaar  call delete("Xfunction-list.diff")
176b0e5283SBram Moolenaar
186b0e5283SBram Moolenaar  " Create a file of the functions in evalfunc.c:global_functions[].
196b0e5283SBram Moolenaar
206b0e5283SBram Moolenaar  enew!
216b0e5283SBram Moolenaar  read ../evalfunc.c
226b0e5283SBram Moolenaar  1,/^static funcentry_T global_functions\[\] =$/d
236b0e5283SBram Moolenaar  call search('^};$')
246b0e5283SBram Moolenaar  .,$d
256b0e5283SBram Moolenaar  v/^    {/d
266b0e5283SBram Moolenaar  %s/^    {"//
276b0e5283SBram Moolenaar  %s/".*//
286b0e5283SBram Moolenaar  w! Xglobal_functions
296b0e5283SBram Moolenaar
306b0e5283SBram Moolenaar  " Verify that those functions are in ASCII order.
316b0e5283SBram Moolenaar
326b0e5283SBram Moolenaar  sort u
336b0e5283SBram Moolenaar  w! Xsorted_global_functions
346b0e5283SBram Moolenaar  let l:unequal = assert_equalfile("Xsorted_global_functions", "Xglobal_functions",
356b0e5283SBram Moolenaar      \ "global_functions[] not sorted")
366b0e5283SBram Moolenaar  if l:unequal && executable("diff")
376b0e5283SBram Moolenaar    call system("diff -u Xsorted_global_functions Xglobal_functions > Xglobal_functions.diff")
386b0e5283SBram Moolenaar  endif
396b0e5283SBram Moolenaar
406b0e5283SBram Moolenaar  " Create a file of the functions in evalfunc.c:global_functions[] that are
416b0e5283SBram Moolenaar  " not obsolete, sorted in ASCII order.
426b0e5283SBram Moolenaar
436b0e5283SBram Moolenaar  enew!
446b0e5283SBram Moolenaar  read ../evalfunc.c
456b0e5283SBram Moolenaar  1,/^static funcentry_T global_functions\[\] =$/d
466b0e5283SBram Moolenaar  call search('^};$')
476b0e5283SBram Moolenaar  .,$d
486b0e5283SBram Moolenaar  v/^    {/d
496b0e5283SBram Moolenaar  g/\/\/ obsolete$/d
506b0e5283SBram Moolenaar  %s/^    {"//
516b0e5283SBram Moolenaar  %s/".*//
526b0e5283SBram Moolenaar  sort u
539155825bSBram Moolenaar  w! ++ff=unix Xsorted_current_global_functions
546b0e5283SBram Moolenaar
556b0e5283SBram Moolenaar  " Verify that the ":help functions" list is complete and in ASCII order.
566b0e5283SBram Moolenaar
576b0e5283SBram Moolenaar  enew!
581bb0da25SBram Moolenaar  if filereadable('../../doc/eval.txt')
591bb0da25SBram Moolenaar    " unpacked MS-Windows zip archive
601bb0da25SBram Moolenaar    read ../../doc/eval.txt
611bb0da25SBram Moolenaar  else
626b0e5283SBram Moolenaar    read ../../runtime/doc/eval.txt
631bb0da25SBram Moolenaar  endif
646b0e5283SBram Moolenaar  call search('\*functions\*$')
656b0e5283SBram Moolenaar  call search('^USAGE')
666b0e5283SBram Moolenaar  1,.d
676b0e5283SBram Moolenaar  call search('\*\K\k*()\*$')
686b0e5283SBram Moolenaar  .,$d
696b0e5283SBram Moolenaar  v/^\S/d
706b0e5283SBram Moolenaar  %s/(.*//
716b0e5283SBram Moolenaar  let l:lines = getline(1, '$')
726b0e5283SBram Moolenaar  call uniq(l:lines)
736b0e5283SBram Moolenaar  call writefile(l:lines, "Xfunctions")
746b0e5283SBram Moolenaar  let l:unequal = assert_equalfile("Xsorted_current_global_functions", "Xfunctions",
756b0e5283SBram Moolenaar      \ "\":help functions\" not sorted or incomplete")
766b0e5283SBram Moolenaar  if l:unequal && executable("diff")
776b0e5283SBram Moolenaar    call system("diff -u Xsorted_current_global_functions Xfunctions > Xfunctions.diff")
786b0e5283SBram Moolenaar  endif
796b0e5283SBram Moolenaar
806b0e5283SBram Moolenaar  " Verify that the ":help function-list" list is complete.
816b0e5283SBram Moolenaar
826b0e5283SBram Moolenaar  enew!
831bb0da25SBram Moolenaar  if filereadable('../../doc/usr_41.txt')
841bb0da25SBram Moolenaar    " unpacked MS-Windows zip archive
851bb0da25SBram Moolenaar    read ../../doc/usr_41.txt
861bb0da25SBram Moolenaar  else
876b0e5283SBram Moolenaar    read ../../runtime/doc/usr_41.txt
881bb0da25SBram Moolenaar  endif
896b0e5283SBram Moolenaar  call search('\*function-list\*$')
906b0e5283SBram Moolenaar  1,.d
916b0e5283SBram Moolenaar  call search('^==*$')
926b0e5283SBram Moolenaar  .,$d
936b0e5283SBram Moolenaar  v/^\t\S/d
946b0e5283SBram Moolenaar  %s/(.*//
956b0e5283SBram Moolenaar  %left
966b0e5283SBram Moolenaar  sort u
979155825bSBram Moolenaar  w! ++ff=unix Xfunction-list
986b0e5283SBram Moolenaar  let l:unequal = assert_equalfile("Xsorted_current_global_functions", "Xfunction-list",
99*f7a023e5SBram Moolenaar      \ "\":help function-list\" incomplete")
1006b0e5283SBram Moolenaar  if l:unequal && executable("diff")
1016b0e5283SBram Moolenaar    call system("diff -u Xsorted_current_global_functions Xfunction-list > Xfunction-list.diff")
1026b0e5283SBram Moolenaar  endif
1036b0e5283SBram Moolenaar
1046b0e5283SBram Moolenaar  " Clean up.
1056b0e5283SBram Moolenaar  call delete("Xglobal_functions")
1066b0e5283SBram Moolenaar  call delete("Xsorted_global_functions")
1076b0e5283SBram Moolenaar  call delete("Xsorted_current_global_functions")
1086b0e5283SBram Moolenaar  call delete("Xfunctions")
1096b0e5283SBram Moolenaar  call delete("Xfunction-list")
1106b0e5283SBram Moolenaar  enew!
1116b0e5283SBram Moolenaar
1126b0e5283SBram Moolenaarendfunc
1136b0e5283SBram Moolenaar
1146b0e5283SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
115