6e679d6d4f
--HG-- extra : rebase_source : 17ea9665bc826a9365264122781e1a7f99948b34
166 lines
7.4 KiB
Plaintext
166 lines
7.4 KiB
Plaintext
*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:
|