]> git.gir.st - VimFx.git/blob - extension/test/index.coffee
Rework programmatic customization of VimFx
[VimFx.git] / extension / test / index.coffee
1 ###
2 # Copyright Simon Lydell 2014, 2015, 2016.
3 #
4 # This file is part of VimFx.
5 #
6 # VimFx is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
10 #
11 # VimFx is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with VimFx. If not, see <http://www.gnu.org/licenses/>.
18 ###
19
20 # This file implements a simple test runner.
21
22 testsList = if IS_FRAME_SCRIPT then './tests-list-frame' else './tests-list'
23
24 list = require(testsList)
25 utils = require('../lib/utils')
26
27 Cu.import('chrome://specialpowers/content/Assert.jsm')
28 assert = new Assert()
29
30 module.exports = (topLevelObject) ->
31 report = []
32 passed = 0
33 total = 0
34
35 for name in list
36 tests = require("./#{name}")
37 report.push(name)
38 for key, fn of tests when key.startsWith('test')
39 total++
40 error = null
41 teardowns = []
42 teardown = (fn) -> teardowns.push(fn)
43 try
44 fn(assert, topLevelObject, teardown)
45 passed++
46 catch error then null
47 finally
48 (try fn()) for fn in teardowns
49 report.push(" #{if error then '✘' else '✔'} #{key}")
50 report.push(utils.formatError(error).replace(/^/gm, ' ')) if error
51
52 type = if IS_FRAME_SCRIPT then 'frame' else 'regular'
53 report.push("\n#{passed}/#{total} #{type} tests passed.\n")
54 console.info("\n#{report.join('\n')}")
Imprint / Impressum