]> git.gir.st - VimFx.git/blob - extension/test/assert.coffee
Change license to MIT
[VimFx.git] / extension / test / assert.coffee
1 # This file provides a basic assertion library.
2
3 createError = (description, message = '') ->
4 formattedMessage = if message then "\nMessage: #{message}" else ''
5 error = new Error("Expected #{description}.#{formattedMessage}")
6 error.stack = error.stack.split('\n')[1..]
7 return error
8
9 format = (value) ->
10 try
11 string = JSON.stringify(value)
12 if string? and not
13 (string == '{}' and Object::toString.call(value) != '[object Object]')
14 return string
15 return String(value)
16
17 arrayEqual = (actual, expected, message = '') ->
18 unless Array.isArray(actual) and Array.isArray(expected)
19 throw createError(
20 "two arrays to compare. Got: #{format(actual)} and #{format(expected)}",
21 message
22 )
23 unless actual.length == expected.length and
24 actual.every((actualItem, index) -> actualItem == expected[index])
25 throw createError(
26 "#{format(actual)} to array-equal #{format(expected)}",
27 message
28 )
29
30 equal = (actual, expected, message = '') ->
31 return if actual == expected
32 throw createError("#{format(actual)} to equal #{format(expected)}", message)
33
34 notEqual = (actual, expected, message = '') ->
35 return if actual != expected
36 throw createError(
37 "#{format(actual)} NOT to equal #{format(expected)}",
38 message
39 )
40
41 ok = (actual, message = '') ->
42 return if actual
43 throw createError("#{format(actual)} to be truthy", message)
44
45 throws = (regex, badValue, fn) ->
46 try fn() catch error
47 start = 'VimFx:'
48 unless error.message.startsWith(start)
49 throw createError(
50 "thrown error message #{format(error.message)} to start with
51 #{format(start)}")
52 end = ": #{badValue}"
53 unless error.message.endsWith(end)
54 throw createError(
55 "thrown error message #{format(error.message)} to end with
56 #{format(end)}")
57 unless regex.test(error.message)
58 throw createError(
59 "thrown error message #{format(error.message)} to match the regex
60 #{format(regex)}")
61 return
62 throw createError("function to throw, but it did not: #{format(fn)}")
63
64 module.exports = {
65 arrayEqual
66 equal
67 notEqual
68 ok
69 throws
70 }
Imprint / Impressum