Patch 8.0.0189
Summary: profile commands are not tested
Problem: There are no tests for the :profile command.
Solution: Add tests. (Dominique Pelle)
Files: src/Makefile, src/testdir/Make_all.mak,
src/testdir/test_profile.vim
*** ../vim-8.0.0188/src/Makefile 2017-01-10 16:12:11.736767011 +0100
--- src/Makefile 2017-01-15 15:07:50.940216456 +0100
***************
*** 2147,2152 ****
--- 2147,2153 ----
test_partial \
test_perl \
test_popup \
+ test_profile \
test_quickfix \
test_regexp_latin \
test_regexp_utf8 \
*** ../vim-8.0.0188/src/testdir/Make_all.mak 2017-01-13 22:30:03.761030349
+0100
--- src/testdir/Make_all.mak 2017-01-15 15:06:28.532766499 +0100
***************
*** 175,180 ****
--- 175,181 ----
test_normal.res \
test_packadd.res \
test_perl.res \
+ test_profile.res \
test_quickfix.res \
test_ruby.res \
test_search.res \
*** ../vim-8.0.0188/src/testdir/test_profile.vim 2017-01-15
15:21:14.646863439 +0100
--- src/testdir/test_profile.vim 2017-01-15 15:17:49.308229678 +0100
***************
*** 0 ****
--- 1,135 ----
+ " Test Vim profiler
+ if !has('profile')
+ finish
+ endif
+
+ func Test_profile_func()
+ if !has('unix')
+ return
+ endif
+ let lines = [
+ \ "func! Foo1()",
+ \ "endfunc",
+ \ "func! Foo2()",
+ \ " let count = 100",
+ \ " while count > 0",
+ \ " let count = count - 1",
+ \ " endwhile",
+ \ "endfunc",
+ \ "func! Foo3()",
+ \ "endfunc",
+ \ "func! Bar()",
+ \ "endfunc",
+ \ "call Foo1()",
+ \ "call Foo1()",
+ \ "profile pause",
+ \ "call Foo1()",
+ \ "profile continue",
+ \ "call Foo2()",
+ \ "call Foo3()",
+ \ "call Bar()",
+ \ "if !v:profiling",
+ \ " delfunc Foo2",
+ \ "endif",
+ \ "delfunc Foo3",
+ \ ]
+
+ call writefile(lines, 'Xprofile_func.vim')
+ let a = system(v:progpath
+ \ . " -u NONE -i NONE --noplugin"
+ \ . " -c 'profile start Xprofile_func.log'"
+ \ . " -c 'profile func Foo*'"
+ \ . " -c 'so Xprofile_func.vim'"
+ \ . " -c 'qall!'")
+ let lines = readfile('Xprofile_func.log')
+
+ call assert_equal(28, len(lines))
+
+ call assert_equal('FUNCTION Foo1()', lines[0])
+ call assert_equal('Called 2 times', lines[1])
+ call assert_equal('FUNCTION Foo2()', lines[7])
+ call assert_equal('Called 1 time', lines[8])
+
+ " - Foo1() is called 3 times but should be reported as called twice
+ " since one call is in between "profile pause" .. "profile continue".
+ " - Foo2() should come before Foo1() since Foo1() does much more work.\
+ " - Foo3() is not reported because function is deleted.
+ " - Unlike Foo3(), Foo2() should not be deleted since there is a check
+ " for v:profiling.
+ " - Bar() is not reported since it does not match "profile func Foo*".
+ call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[18])
+ call assert_equal('count total (s) self (s) function', lines[19])
+ call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo2()$', lines[20])
+ call assert_match('^\s*2\s\+\d\+\.\d\+\s\+Foo1()$', lines[21])
+ call assert_equal('', lines[22])
+ call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[23])
+ call assert_equal('count total (s) self (s) function', lines[24])
+ call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo2()$', lines[25])
+ call assert_match('^\s*2\s\+\d\+\.\d\+\s\+Foo1()$', lines[26])
+ call assert_equal('', lines[27])
+
+ call delete('Xprofile_func.vim')
+ call delete('Xprofile_func.log')
+ endfunc
+
+ func Test_profile_file()
+ if !has('unix')
+ return
+ endif
+ let lines = [
+ \ 'func! Foo()',
+ \ 'endfunc',
+ \ 'for i in range(10)',
+ \ ' " a comment',
+ \ ' call Foo()',
+ \ 'endfor',
+ \ 'call Foo()',
+ \ ]
+
+ call writefile(lines, 'Xprofile_file.vim')
+ let a = system(v:progpath
+ \ . " -u NONE -i NONE --noplugin"
+ \ . " -c 'profile start Xprofile_file.log'"
+ \ . " -c 'profile file Xprofile_file.vim'"
+ \ . " -c 'so Xprofile_file.vim'"
+ \ . " -c 'so Xprofile_file.vim'"
+ \ . " -c 'qall!'")
+
+ let lines = readfile('Xprofile_file.log')
+
+ call assert_equal(14, len(lines))
+
+ call assert_match('^SCRIPT .*Xprofile_file.vim$',
lines[0])
+ call assert_equal('Sourced 2 times',
lines[1])
+ call assert_match('^Total time:\s\+\d\+\.\d\+$',
lines[2])
+ call assert_match('^ Self time:\s\+\d\+\.\d\+$',
lines[3])
+ call assert_equal('',
lines[4])
+ call assert_equal('count total (s) self (s)',
lines[5])
+ call assert_equal(' func! Foo()',
lines[6])
+ call assert_equal(' endfunc',
lines[7])
+ " Loop iterates 10 times. Since script runs twice, body executes 20 times.
+ " First line of loop executes one more time than body to detect end of loop.
+ call assert_match('^\s*22\s\+\d\+\.\d\+\s\+for i in range(10)$',
lines[8])
+ call assert_equal(' " a comment',
lines[9])
+ call assert_match('^\s*20\s\+\d\+\.\d\+\s\+\d\+\.\d\+\s\+call Foo()$',
lines[10])
+ call assert_match('^\s*20\s\+\d\+\.\d\+\s\+endfor$',
lines[11])
+ call assert_match('^\s*2\s\+\d\+\.\d\+\s\+\d\+\.\d\+\s\+call Foo()$',
lines[12])
+ call assert_equal('',
lines[13])
+
+ call delete('Xprofile_file.vim')
+ call delete('Xprofile_file.log')
+ endfunc
+
+ func Test_profile_completion()
+ call feedkeys(":profile \<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_equal('"profile continue file func pause start', @:)
+
+ call feedkeys(":profile start test_prof\<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_match('^"profile start.* test_profile\.vim', @:)
+ endfunc
+
+ func Test_profile_errors()
+ call assert_fails("profile func Foo", 'E750:')
+ call assert_fails("profile pause", 'E750:')
+ call assert_fails("profile continue", 'E750:')
+ endfunc
*** ../vim-8.0.0188/src/version.c 2017-01-15 13:53:45.925629742 +0100
--- src/version.c 2017-01-15 15:07:24.180395041 +0100
***************
*** 766,767 ****
--- 766,769 ----
{ /* Add new patch number below this line */
+ /**/
+ 189,
/**/
--
Error:015 - Unable to exit Windows. Try the door.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.