]> git.gir.st - VimFx.git/blob - extension/test/test-parse-prefs.coffee
Change license to MIT
[VimFx.git] / extension / test / test-parse-prefs.coffee
1 assert = require('./assert')
2 prefs = require('../lib/prefs')
3
4 resetPrefOnTeardown = (pref, teardown) ->
5 previousValue = if prefs.has(pref) then prefs.get(pref) else null
6 teardown(->
7 prefs.set(pref, previousValue)
8 )
9
10 testPref = (pref, fn) ->
11 return ($vimfx, teardown) ->
12 resetPrefOnTeardown(pref, teardown)
13 test = (input, output) ->
14 prefs.set(pref, input)
15 actual = prefs.get(pref)
16 if typeof output == 'string'
17 assert.equal(actual, output)
18 else
19 assert.ok(
20 output.test(actual),
21 "#{output}.test(#{JSON.stringify(actual)})"
22 )
23 fn(test)
24
25 testPrefParsed = (pref, fn) ->
26 return ($vimfx, teardown) ->
27 resetPrefOnTeardown(pref, teardown)
28 test = (input, fn2) ->
29 prefs.set(pref, input)
30 fn2($vimfx.options[pref])
31 fn(test)
32
33 exports['test hints.chars'] = testPref('hints.chars', (test) ->
34 # Invalid values.
35 test('', /^([a-z]) (?!\1)[a-z]$/)
36 test(' ', /^([a-z]) (?!\1)[a-z]$/)
37 test('a', /^a [b-z]$/)
38 test('aa', /^a [b-z]$/)
39
40 # Whitespace handling.
41 test('ab', 'a b')
42 test(' a b\t', 'a b')
43 test('a\tb', 'a b')
44
45 # Automatic grouping.
46 test('abc', 'ab c')
47 test('abcd', 'ab cd')
48 test('abcde', 'abc de')
49 test('abcdef', 'abcd ef')
50
51 # Use last space.
52 test('ab cde f ', 'abcde f')
53 test('ab cde\tf ', 'abcde f')
54
55 # Remove duplicates.
56 test('aba fcAde\tf!.!e ', 'abfcAde !.')
57 )
58
59 spaceDelimitedStringPrefs = [
60 'prev_patterns', 'next_patterns', 'blacklist', 'prevent_autofocus_modes'
61 'adjustable_element_keys', 'activatable_element_keys', 'pattern_attrs'
62 ]
63 spaceDelimitedStringPrefs.forEach((pref) ->
64 exports["test #{pref}"] = testPref(pref, (test) ->
65 # Empty values.
66 test('', '')
67 test(' ', '')
68 test('\t ', '')
69
70 # Simple cases.
71 test('a', 'a')
72 test(' a', 'a')
73 test('a ', 'a')
74 test('a\t', 'a')
75 test(' abc def\tg', 'abc def g')
76
77 # Remove duplicates.
78 test('a a ab A aB AB ABC AB', 'a ab A aB AB ABC')
79 )
80 )
81
82 ['prev_patterns', 'next_patterns'].forEach((pref) ->
83 exports["test #{pref} regex"] = testPrefParsed(pref, (test) ->
84 test('previous previous\\S* foo(', (parsed) ->
85 # Case insensitivity.
86 assert.ok(parsed[0].test('previous'))
87 assert.ok(parsed[0].test('PREVIOUS'))
88 assert.ok(parsed[0].test('Previous'))
89
90 # Whitespace handling.
91 assert.ok(parsed[0].test(' previous'))
92 assert.ok(parsed[0].test('previous '))
93 assert.ok(parsed[0].test(' previous '))
94
95 # Must match at start or end.
96 assert.ok(parsed[0].test('previous b'))
97 assert.ok(parsed[0].test('a previous'))
98 assert.ok(not parsed[0].test('a previous b'))
99
100 # Must match entire words.
101 assert.ok(not parsed[0].test('previously'))
102 assert.ok(not parsed[0].test('previouså'))
103
104 # Regex.
105 assert.ok(parsed[1].test('previous'))
106 assert.ok(parsed[1].test('previously'))
107 assert.ok(not parsed[1].test('foopreviously'))
108 assert.ok(not parsed[1].test('a previously b'))
109
110 # Regex escape.
111 assert.ok(parsed[2].test('foo('))
112 )
113 )
114 )
115
116 exports['test blacklist regex'] = testPrefParsed('blacklist', (test) ->
117 test('example *EXAMPLE* *example.com/?*=}*', (parsed) ->
118 # Case insensitivity.
119 assert.ok(parsed[0].test('example'))
120 assert.ok(parsed[0].test('EXAMPLE'))
121 assert.ok(parsed[0].test('Example'))
122
123 # Must match entire string.
124 assert.ok(not parsed[0].test('http://example.com'))
125
126 # Wildcard.
127 assert.ok(parsed[1].test('http://example.com'))
128 assert.ok(parsed[1].test('http://foobar/?q=examples'))
129
130 # Regex escape.
131 assert.ok(parsed[2].test('https://www.example.com/?test=}&foo=bar'))
132 )
133 )
Imprint / Impressum