gundo.vim/tests/bundled/ut/doc/UT.txt
Steve Losh 6e679d6d4f Add a unit test. This here is a grey triangle moment, folks.
--HG--
extra : rebase_source : 17ea9665bc826a9365264122781e1a7f99948b34
2010-11-10 19:52:08 -05:00

166 lines
7.4 KiB
Plaintext
Raw Permalink Blame History

*UT.txt* Unit Testing Framework for Vim (v0.0.3)
For Vim version 7+. Last change: $Date: 2010-05-17 19:10:03 -0400 (Mon, 17 May 2010) $
By Luc Hermitte
hermitte {at} free {dot} fr
------------------------------------------------------------------------------
CONTENTS *UT-contents* {{{1
|UT-presentation| Presentation
|UT-usage| Usage
|UT-API| UT API
|UT-examples| Examples
|UT-todo| Bugs to fix and futur enhancements to come
|UT-design| Design choices
|UT-others| Other tests related plugins for vim
|add-local-help| Instructions on installing this file
------------------------------------------------------------------------------
PRESENTATION *UT-presentation* {{{1
UT is another Test Unit Framework for Vim, which main particularity is to fill
the |quickfix| window with the assertion failures.
Features~
- Assertion failures are reported in the |quickfix| window
- Assertion syntax is simple, check Tom Link's suite, it's the same
- Supports banged ":Assert!" to stop processing a given test on failed
assertions
- All the |s:Test()| functions of a suite are executed (almost)
independently (i.e., a critical ":Assert!" failure will stop the Test of
the function, and |lh#UT| will proceed to the next |s:Test()| function
- Lightweight and simple to use: there is only one command defined, all the
other definitions are kept in an autoload plugin.
- A suite == a file
- Several |s:Test()| functions per suite
- +optional |s:Setup()|, |s:Teardown()|
- Supports |:Comments|
- |local-function|s, |script-variable|s, and |local-variable|s are supported
- Takes advantage of |BuildToolsWrapper|'s |:Copen| command if installed
- Counts successful tests and not successful assertions
- Short-cuts to run the Unit Tests associated to a given vim script; Relies
on: |Let-Modeline|, |local_vimrc|/|project.vim| to set |g:UTfiles| (space
separated list of glob-able paths), and on |lhvl#path|.
- Command to exclude, or specify the tests to play => |:UTPlay|, |UTIgnore|
Requirements~
This suite requires Vim 7.1 and |lh-vim-lib| v2.2.0+.
------------------------------------------------------------------------------
USAGE *UT-usage* {{{1
First, create a new vim script, it will be a Unit Testing Suite.
*:UTSuite*
One of the first lines must contain >
UTSuite Some intelligible name for the suite
<
*:Assert*
Then you are free to directly assert anything you wish as long as it is a
valid vim |expression|, e.g. >
Assert 1 > 2
Assert 1 > 0
Assert s:foo > s:Bar(g:var + 28) / strlen("foobar")
or to define as many independent tests as you wish.
*:Comment*
Comments may be added to the |quickfix| report thanks to the |:Comment|
fake command.
*s:Test()*
A test is a function with a name starting with |s:Test|. Even if a test
critically fails, the next test will be executed, e.g. >
function s:Test1()
let var = SomeFucntion()
Assert! type(var) == type(0)
Assert var < 42
Assert! var > 0
" Some other code that won't be executed if the previous assertion failed
let i = var / 42.0
Comment This comment may never be displayed if {var} is negative or not a number
endfunction
function s:Test2()
Assert s:what != Ever()
endfunction
<
*s:Setup()* *s:Teardown()*
If you wish to see a set-up function executed before each test, define the
|s:Setup()| function.
If you wish to see a clean-up function executed after each test, define the
|s:Teardown()| function.
*:UTRun*
Finally run |:UTRun| on your test script (filename), and ... debug your failed
assertions from the |quickfix| window.
------------------------------------------------------------------------------
UT API *UT-API* {{{1
*should#be#dict()* returns whether the parameter is a |Dictionary|
*should#be#float()* returns whether the parameter is a |float|
*should#be#funcref()* returns whether the parameter is a |Funcref|
*should#be#list()* returns whether the parameter is a |List|
*should#be#number()* returns whether the parameter is a |expr-number|
*should#be#string()* returns whether the parameter is a |expr-string|
------------------------------------------------------------------------------
EXAMPLES *UT-examples* {{{1
See:
- {rtp}/tests/lh/UT.vim tests/lh/UT.vim for a classical test,
- {rtp}/tests/lh/UT-fixtures.vim tests/lh/UT-fixtures.vim for a test with
fixtures.
------------------------------------------------------------------------------
TO DO *UT-todo* {{{1
- Add |'efm'| for VimL errors like the one produced by >
:Assert 0 + [0]
- Check UT works fine under windows (where paths have spaces, etc), and on
UTF-8 files
- Simplify "s:errors" functions
- Merge with Tom Link's tAssert plugin? (the UI is quite different)
- |:AssertEquals| that shows the name of both expressions and their values as
well -- a correct distinction of both parameters will be tricky with regexes
; using functions will loose either the name, or the value in case of
local/script variables use ; we need macros /<2F> la C/...
- Support Embedded comments like for instance: >
Assert 1 == 1 " 1 must value 1
- Ways to test buffers produced
- Always execute |s:Teardown()| -- move its call to a |:finally| bloc
- Find a way to prevent the potential script scope pollution
------------------------------------------------------------------------------
DESIGN CHOICES *UT-design* {{{1
The assertions supported by this plugin are expected to be made in a Unit
Testing file, they are not to be used in regular VimL scripts as a /Design by
Contract/ tool. Check Thomas Link's plugin, it is much more suited for that
kind of assertions.
In order to be able to produce the |quickfix| entries, the plugin first parses
the Unit Test file to complete all |:Assert| occurrences with extra
information about the line number where the assertion is made.
------------------------------------------------------------------------------
OTHER TESTS RELATED PLUGINS FOR VIM *UT-others* {{{1
You may also want to have a look at:
- Tom Link's |tAssert| plugin
http://www.vim.org/scripts/script.php?script_id=1730
- Staale Flock's |vimUnit| plugin
http://www.vim.org/scripts/script.php?script_id=1125
- Meikel Brandmeyer's |vimTAP| plugin
http://www.vim.org/scripts/script.php?script_id=2213
------------------------------------------------------------------------------
<20> Luc Hermitte, 2010, http://code.google.com/p/lh-vim/
$Id: UT.txt 193 2010-05-17 23:10:03Z luc.hermitte $
VIM: let b:VS_language = 'american'
vim:ts=8:sw=4:tw=80:fo=tcq2:isk=!-~,^*,^\|,^\":ft=help:fdm=marker: