1 assert = require('./assert')
2 prefs = require('../lib/prefs')
4 resetPrefOnTeardown = (pref, teardown) ->
5 previousValue = if prefs.has(pref) then prefs.get(pref) else null
7 prefs.set(pref, previousValue)
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)
21 "#{output}.test(#{JSON.stringify(actual)})"
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])
33 exports['test hints.chars'] = testPref('hints.chars', (test) ->
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]$/)
40 # Whitespace handling.
48 test('abcde', 'abc de')
49 test('abcdef', 'abcd ef')
52 test('ab cde f ', 'abcde f')
53 test('ab cde\tf ', 'abcde f')
56 test('aba fcAde\tf!.!e ', 'abfcAde !.')
59 spaceDelimitedStringPrefs = [
60 'prev_patterns', 'next_patterns', 'blacklist', 'prevent_autofocus_modes'
61 'adjustable_element_keys', 'activatable_element_keys', 'pattern_attrs'
63 spaceDelimitedStringPrefs.forEach((pref) ->
64 exports["test #{pref}"] = testPref(pref, (test) ->
75 test(' abc def\tg', 'abc def g')
78 test('a a ab A aB AB ABC AB', 'a ab A aB AB ABC')
82 ['prev_patterns', 'next_patterns'].forEach((pref) ->
83 exports["test #{pref} regex"] = testPrefParsed(pref, (test) ->
84 test('previous previous\\S* foo(', (parsed) ->
86 assert.ok(parsed[0].test('previous'))
87 assert.ok(parsed[0].test('PREVIOUS'))
88 assert.ok(parsed[0].test('Previous'))
90 # Whitespace handling.
91 assert.ok(parsed[0].test(' previous'))
92 assert.ok(parsed[0].test('previous '))
93 assert.ok(parsed[0].test(' previous '))
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'))
100 # Must match entire words.
101 assert.ok(not parsed[0].test('previously'))
102 assert.ok(not parsed[0].test('previouså'))
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'))
111 assert.ok(parsed[2].test('foo('))
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'))
123 # Must match entire string.
124 assert.ok(not parsed[0].test('http://example.com'))
127 assert.ok(parsed[1].test('http://example.com'))
128 assert.ok(parsed[1].test('http://foobar/?q=examples'))
131 assert.ok(parsed[2].test('https://www.example.com/?test=}&foo=bar'))