2 # Copyright Simon Lydell 2016.
4 # This file is part of VimFx.
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.
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.
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/>.
20 assert = require('./assert')
21 prefs = require('../lib/prefs')
23 resetPrefOnTeardown = (pref, teardown) ->
24 previousValue = if prefs.has(pref) then prefs.get(pref) else null
26 prefs.set(pref, previousValue)
29 testPref = (pref, fn) ->
30 return ($vimfx, teardown) ->
31 resetPrefOnTeardown(pref, teardown)
32 test = (input, output) ->
33 prefs.set(pref, input)
34 actual = prefs.get(pref)
35 if typeof output == 'string'
36 assert.equal(actual, output)
40 "#{output}.test(#{JSON.stringify(actual)})"
44 testPrefParsed = (pref, fn) ->
45 return ($vimfx, teardown) ->
46 resetPrefOnTeardown(pref, teardown)
47 test = (input, fn2) ->
48 prefs.set(pref, input)
49 fn2($vimfx.options[pref])
52 exports['test hints.chars'] = testPref('hints.chars', (test) ->
54 test('', /^([a-z]) (?!\1)[a-z]$/)
55 test(' ', /^([a-z]) (?!\1)[a-z]$/)
56 test('a', /^a [b-z]$/)
57 test('aa', /^a [b-z]$/)
59 # Whitespace handling.
67 test('abcde', 'abc de')
68 test('abcdef', 'abcd ef')
71 test('ab cde f ', 'abcde f')
72 test('ab cde\tf ', 'abcde f')
75 test('aba fcAde\tf!.!e ', 'abfcAde !.')
78 spaceDelimitedStringPrefs = [
79 'prev_patterns', 'next_patterns', 'blacklist', 'prevent_autofocus_modes'
80 'adjustable_element_keys', 'activatable_element_keys', 'pattern_attrs'
82 spaceDelimitedStringPrefs.forEach((pref) ->
83 exports["test #{pref}"] = testPref(pref, (test) ->
94 test(' abc def\tg', 'abc def g')
97 test('a a ab A aB AB ABC AB', 'a ab A aB AB ABC')
101 ['prev_patterns', 'next_patterns'].forEach((pref) ->
102 exports["test #{pref} regex"] = testPrefParsed(pref, (test) ->
103 test('previous previous\\S* foo(', (parsed) ->
104 # Case insensitivity.
105 assert.ok(parsed[0].test('previous'))
106 assert.ok(parsed[0].test('PREVIOUS'))
107 assert.ok(parsed[0].test('Previous'))
109 # Whitespace handling.
110 assert.ok(parsed[0].test(' previous'))
111 assert.ok(parsed[0].test('previous '))
112 assert.ok(parsed[0].test(' previous '))
114 # Must match at start or end.
115 assert.ok(parsed[0].test('previous b'))
116 assert.ok(parsed[0].test('a previous'))
117 assert.ok(not parsed[0].test('a previous b'))
119 # Must match entire words.
120 assert.ok(not parsed[0].test('previously'))
121 assert.ok(not parsed[0].test('previouså'))
124 assert.ok(parsed[1].test('previous'))
125 assert.ok(parsed[1].test('previously'))
126 assert.ok(not parsed[1].test('foopreviously'))
127 assert.ok(not parsed[1].test('a previously b'))
130 assert.ok(parsed[2].test('foo('))
135 exports['test blacklist regex'] = testPrefParsed('blacklist', (test) ->
136 test('example *EXAMPLE* *example.com/?*=}*', (parsed) ->
137 # Case insensitivity.
138 assert.ok(parsed[0].test('example'))
139 assert.ok(parsed[0].test('EXAMPLE'))
140 assert.ok(parsed[0].test('Example'))
142 # Must match entire string.
143 assert.ok(not parsed[0].test('http://example.com'))
146 assert.ok(parsed[1].test('http://example.com'))
147 assert.ok(parsed[1].test('http://foobar/?q=examples'))
150 assert.ok(parsed[2].test('https://www.example.com/?test=}&foo=bar'))