From 58deb3f7b7c470a4d705f1dabf7aa13e095e8d09 Mon Sep 17 00:00:00 2001 From: Simon Lydell Date: Sun, 4 Dec 2016 15:48:04 +0100 Subject: [PATCH] Fix tests in Firefox Nightly Firefox have either moved the Assert.jsm module, or stopped exposing it. I'm tired of that happening (it's not the first time), so I decided to implement the small part of Assert.jsm that was actually used in VimFx's test on my own. On the upside, this resulted in nicer error messages when tests fail. --- extension/lib/utils.coffee | 9 -- extension/test/assert.coffee | 89 ++++++++++++++++ extension/test/index.coffee | 9 +- extension/test/test-api-frame.coffee | 29 +++--- extension/test/test-api.coffee | 136 ++++++++++++------------- extension/test/test-legacy.coffee | 31 +++--- extension/test/test-parse-prefs.coffee | 11 +- extension/test/test-utils.coffee | 71 ++++++------- extension/test/utils.coffee | 8 -- 9 files changed, 231 insertions(+), 162 deletions(-) create mode 100644 extension/test/assert.coffee diff --git a/extension/lib/utils.coffee b/extension/lib/utils.coffee index 88604ac..a8c6fef 100644 --- a/extension/lib/utils.coffee +++ b/extension/lib/utils.coffee @@ -668,14 +668,6 @@ expandPath = (path) -> else return path -formatError = (error) -> - stack = String(error.stack?.formattedStack ? error.stack ? '') - .split('\n') - .filter((line) -> line.includes('.xpi!')) - .map((line) -> ' ' + line.replace(/(?:\/<)*@.+\.xpi!/g, '@')) - .join('\n') - return "#{error}\n#{stack}" - getCurrentLocation = -> return unless window = getCurrentWindow() return new window.URL(window.gBrowser.selectedBrowser.currentURI.spec) @@ -787,7 +779,6 @@ module.exports = { sum expandPath - formatError getCurrentLocation getCurrentWindow hasEventListeners diff --git a/extension/test/assert.coffee b/extension/test/assert.coffee new file mode 100644 index 0000000..7a871ee --- /dev/null +++ b/extension/test/assert.coffee @@ -0,0 +1,89 @@ +### +# Copyright Simon Lydell 2016. +# +# This file is part of VimFx. +# +# VimFx is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# VimFx is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with VimFx. If not, see . +### + +# This file provides a basic assertion library. + +createError = (description, message = '') -> + formattedMessage = if message then "\nMessage: #{message}" else '' + error = new Error("Expected #{description}.#{formattedMessage}") + error.stack = error.stack.split('\n')[1..] + return error + +format = (value) -> + try + string = JSON.stringify(value) + if string? and not + (string == '{}' and Object::toString.call(value) != '[object Object]') + return string + return String(value) + +arrayEqual = (actual, expected, message = '') -> + unless Array.isArray(actual) and Array.isArray(expected) + throw createError( + "two arrays to compare. Got: #{format(actual)} and #{format(expected)}", + message + ) + unless actual.length == expected.length and + actual.every((actualItem, index) -> actualItem == expected[index]) + throw createError( + "#{format(actual)} to array-equal #{format(expected)}", + message + ) + +equal = (actual, expected, message = '') -> + return if actual == expected + throw createError("#{format(actual)} to equal #{format(expected)}", message) + +notEqual = (actual, expected, message = '') -> + return if actual != expected + throw createError( + "#{format(actual)} NOT to equal #{format(expected)}", + message + ) + +ok = (actual, message = '') -> + return if actual + throw createError("#{format(actual)} to be truthy", message) + +throws = (regex, badValue, fn) -> + try fn() catch error + start = 'VimFx:' + unless error.message.startsWith(start) + throw createError( + "thrown error message #{format(error.message)} to start with + #{format(start)}") + end = ": #{badValue}" + unless error.message.endsWith(end) + throw createError( + "thrown error message #{format(error.message)} to end with + #{format(end)}") + unless regex.test(error.message) + throw createError( + "thrown error message #{format(error.message)} to match the regex + #{format(regex)}") + return + throw createError("function to throw, but it did not: #{format(fn)}") + +module.exports = { + arrayEqual + equal + notEqual + ok + throws +} diff --git a/extension/test/index.coffee b/extension/test/index.coffee index f69a3b4..0d26293 100644 --- a/extension/test/index.coffee +++ b/extension/test/index.coffee @@ -19,11 +19,6 @@ # This file implements a simple test runner. -utils = require('../lib/utils') - -{Assert} = Cu.import('chrome://specialpowers/content/Assert.jsm', {}) -assert = new Assert() - list = do -> # @echo TESTS module.exports = (topLevelObject) -> @@ -40,13 +35,13 @@ module.exports = (topLevelObject) -> teardowns = [] teardown = (fn) -> teardowns.push(fn) try - fn(assert, topLevelObject, teardown) + fn(topLevelObject, teardown) passed += 1 catch error then null finally (try fn()) for fn in teardowns report.push(" #{if error then '✘' else '✔'} #{key}") - report.push(utils.formatError(error).replace(/^/gm, ' ')) if error + report.push("#{error}\n#{error.stack}".replace(/^/gm, ' ')) if error type = if IS_FRAME_SCRIPT then 'frame' else 'regular' report.push("\n#{passed}/#{total} #{type} tests passed.\n") diff --git a/extension/test/test-api-frame.coffee b/extension/test/test-api-frame.coffee index c55e037..14b544e 100644 --- a/extension/test/test-api-frame.coffee +++ b/extension/test/test-api-frame.coffee @@ -17,19 +17,18 @@ # along with VimFx. If not, see . ### -testUtils = require('./utils') +assert = require('./assert') +testUtils = require('./utils') createConfigAPI = require('../lib/api-frame') -{throws} = testUtils - -exports['test exports'] = (assert, $vim) -> +exports['test exports'] = ($vim) -> vimfx = createConfigAPI($vim) assert.equal(typeof vimfx.listen, 'function', 'listen') assert.equal(typeof vimfx.setHintMatcher, 'function', 'setHintMatcher') assert.equal(typeof vimfx.getMarkerElement, 'function', 'getMarkerElement') -exports['test vimfx.listen'] = (assert, $vim, teardown) -> +exports['test vimfx.listen'] = ($vim, teardown) -> shutdownHandlers = [] onShutdown = (fn) -> shutdownHandlers.push(fn) vimfx = createConfigAPI($vim, onShutdown) @@ -57,7 +56,7 @@ exports['test vimfx.listen'] = (assert, $vim, teardown) -> assert.equal(messageManager.addMessageListenerCalls, 1) assert.equal(messageManager.removeMessageListenerCalls, 1) -exports['test vimfx.setHintMatcher'] = (assert, $vim) -> +exports['test vimfx.setHintMatcher'] = ($vim) -> shutdownHandlers = [] onShutdown = (fn) -> shutdownHandlers.push(fn) vimfx = createConfigAPI($vim, onShutdown) @@ -72,7 +71,7 @@ exports['test vimfx.setHintMatcher'] = (assert, $vim) -> shutdownHandlers[0]() assert.ok(not $vim.hintMatcher) -exports['test vimfx.getMarkerElement'] = (assert, $vim, teardown) -> +exports['test vimfx.getMarkerElement'] = ($vim, teardown) -> teardown(-> $vim.state.markerElements = [] ) @@ -88,32 +87,32 @@ exports['test vimfx.getMarkerElement'] = (assert, $vim, teardown) -> $vim.state.markerElements = [] assert.equal(vimfx.getMarkerElement(0), null) -exports['test vimfx.listen errors'] = (assert, $vim) -> +exports['test vimfx.listen errors'] = ($vim) -> vimfx = createConfigAPI($vim) - throws(assert, /message string/i, 'undefined', -> + assert.throws(/message string/i, 'undefined', -> vimfx.listen() ) - throws(assert, /message string/i, 'false', -> + assert.throws(/message string/i, 'false', -> vimfx.listen(false) ) - throws(assert, /listener function/i, 'undefined', -> + assert.throws(/listener function/i, 'undefined', -> vimfx.listen('message') ) - throws(assert, /listener function/i, 'false', -> + assert.throws(/listener function/i, 'false', -> vimfx.listen('message', false) ) -exports['test vimfx.setHintMatcher errors'] = (assert, $vim) -> +exports['test vimfx.setHintMatcher errors'] = ($vim) -> vimfx = createConfigAPI($vim) - throws(assert, /function/i, 'undefined', -> + assert.throws(/function/i, 'undefined', -> vimfx.setHintMatcher() ) - throws(assert, /function/i, 'false', -> + assert.throws(/function/i, 'false', -> vimfx.setHintMatcher(false) ) diff --git a/extension/test/test-api.coffee b/extension/test/test-api.coffee index 24729d3..d817438 100644 --- a/extension/test/test-api.coffee +++ b/extension/test/test-api.coffee @@ -17,15 +17,14 @@ # along with VimFx. If not, see . ### +assert = require('./assert') testUtils = require('./utils') createConfigAPI = require('../lib/api') defaults = require('../lib/defaults') prefs = require('../lib/prefs') utils = require('../lib/utils') -{throws} = testUtils - -exports['test exports'] = (assert, $vimfx) -> +exports['test exports'] = ($vimfx) -> vimfx = createConfigAPI($vimfx) assert.equal(typeof vimfx.get, 'function', 'get') @@ -40,7 +39,7 @@ exports['test exports'] = (assert, $vimfx) -> assert.equal(typeof vimfx.off, 'function', 'off') assert.equal(vimfx.modes, $vimfx.modes, 'modes') -exports['test vimfx.get and vimfx.set'] = (assert, $vimfx, teardown) -> +exports['test vimfx.get and vimfx.set'] = ($vimfx, teardown) -> vimfx = createConfigAPI($vimfx) resetHintChars = prefs.tmp('hints.chars', 'ab cd') @@ -62,14 +61,15 @@ exports['test vimfx.get and vimfx.set'] = (assert, $vimfx, teardown) -> assert.equal(vimfx.get('blacklist'), 'test') vimfx.set('translations', {KeyQ: ['ö', 'Ö']}) - assert.deepEqual(vimfx.get('translations'), {KeyQ: ['ö', 'Ö']}) + assert.arrayEqual(Object.keys(vimfx.get('translations')), ['KeyQ']) + assert.arrayEqual(vimfx.get('translations').KeyQ, ['ö', 'Ö']) $vimfx.emit('shutdown') assert.equal(vimfx.get('hints.chars'), 'ab cd') assert.ok(not prefs.has('blacklist')) - assert.deepEqual(vimfx.get('translations'), {}) + assert.arrayEqual(Object.keys(vimfx.get('translations')), []) -exports['test vimfx.getDefault'] = (assert, $vimfx, teardown) -> +exports['test vimfx.getDefault'] = ($vimfx, teardown) -> vimfx = createConfigAPI($vimfx) reset = prefs.tmp('hints.chars', 'ab cd') @@ -79,7 +79,7 @@ exports['test vimfx.getDefault'] = (assert, $vimfx, teardown) -> assert.equal(vimfx.getDefault('hints.chars'), defaults.options['hints.chars']) -exports['test customization'] = (assert, $vimfx, teardown) -> +exports['test customization'] = ($vimfx, teardown) -> vimfx = createConfigAPI($vimfx) originalOptions = Object.assign({}, $vimfx.options) @@ -147,7 +147,7 @@ exports['test customization'] = (assert, $vimfx, teardown) -> assert.equal(category_new.name, 'New category') [test_command] = category_new.commands assert.equal(test_command.command.description, 'Test ignore mode command') - assert.deepEqual(test_command.enabledSequences, ['ö']) + assert.arrayEqual(test_command.enabledSequences, ['ö']) # Remove the added commands. delete vimfx.modes.normal.commands.test_command @@ -183,7 +183,7 @@ exports['test customization'] = (assert, $vimfx, teardown) -> [first_category] = mode_ignore.categories assert.notEqual(first_category.name, 'New category') -exports['test vimfx.addCommand order'] = (assert, $vimfx, teardown) -> +exports['test vimfx.addCommand order'] = ($vimfx, teardown) -> vimfx = createConfigAPI($vimfx) teardown(-> @@ -209,7 +209,7 @@ exports['test vimfx.addCommand order'] = (assert, $vimfx, teardown) -> $vimfx.emit('shutdown') assert.ok('test_command' not of vimfx.modes.normal.commands) -exports['test vimfx.addOptionOverrides'] = (assert, $vimfx, teardown) -> +exports['test vimfx.addOptionOverrides'] = ($vimfx, teardown) -> vimfx = createConfigAPI($vimfx) originalOptions = Object.assign({}, $vimfx.options) @@ -240,7 +240,7 @@ exports['test vimfx.addOptionOverrides'] = (assert, $vimfx, teardown) -> $vimfx.emit('shutdown') assert.equal($vimfx.options.prevent_autofocus, true) -exports['test vimfx.addKeyOverrides'] = (assert, $vimfx, teardown) -> +exports['test vimfx.addKeyOverrides'] = ($vimfx, teardown) -> vimfx = createConfigAPI($vimfx) originalOptions = Object.assign({}, $vimfx.options) @@ -309,7 +309,7 @@ exports['test vimfx.addKeyOverrides'] = (assert, $vimfx, teardown) -> {mode: 'normal', focusType: 'none'} ) assert.equal(match.type, 'full') - assert.strictEqual(match.count, undefined) + assert.equal(match.count, undefined) $vimfx.reset('ignore') @@ -342,7 +342,7 @@ exports['test vimfx.addKeyOverrides'] = (assert, $vimfx, teardown) -> ) assert.ok(match) -exports['test vimfx.send'] = (assert, $vimfx) -> +exports['test vimfx.send'] = ($vimfx) -> vimfx = createConfigAPI($vimfx) messageManager = new testUtils.MockMessageManager() @@ -363,7 +363,7 @@ exports['test vimfx.send'] = (assert, $vimfx) -> assert.equal(messageManager.addMessageListenerCalls, 1) assert.equal(messageManager.removeMessageListenerCalls, 0) -exports['test vimfx.on and vimfx.off'] = (assert, $vimfx) -> +exports['test vimfx.on and vimfx.off'] = ($vimfx) -> vimfx = createConfigAPI($vimfx) callCount = 0 @@ -386,215 +386,215 @@ exports['test vimfx.on and vimfx.off'] = (assert, $vimfx) -> $vimfx.emit('foo') assert.equal(callCount, 2) -exports['test vimfx.[gs]et(Default)? errors'] = (assert, $vimfx) -> +exports['test vimfx.[gs]et(Default)? errors'] = ($vimfx) -> vimfx = createConfigAPI($vimfx) - throws(assert, /unknown option/i, 'undefined', -> + assert.throws(/unknown option/i, 'undefined', -> vimfx.get() ) - throws(assert, /unknown option/i, 'undefined', -> + assert.throws(/unknown option/i, 'undefined', -> vimfx.getDefault() ) - throws(assert, /unknown option/i, 'undefined', -> + assert.throws(/unknown option/i, 'undefined', -> vimfx.set() ) - throws(assert, /unknown option/i, 'unknown_pref', -> + assert.throws(/unknown option/i, 'unknown_pref', -> vimfx.get('unknown_pref') ) - throws(assert, /unknown option/i, 'unknown_pref', -> + assert.throws(/unknown option/i, 'unknown_pref', -> vimfx.getDefault('unknown_pref') ) - throws(assert, /no default/i, 'custom.mode.normal.foo', -> + assert.throws(/no default/i, 'custom.mode.normal.foo', -> vimfx.getDefault('custom.mode.normal.foo') ) - throws(assert, /no default/i, 'translations', -> + assert.throws(/no default/i, 'translations', -> vimfx.getDefault('translations') ) - throws(assert, /unknown option/i, 'unknown_pref', -> + assert.throws(/unknown option/i, 'unknown_pref', -> vimfx.set('unknown_pref', 'foo') ) - throws(assert, /boolean, number, string or null/i, 'undefined', -> + assert.throws(/boolean, number, string or null/i, 'undefined', -> vimfx.set('hints.chars') ) - throws(assert, /boolean, number, string or null/i, 'object', -> + assert.throws(/boolean, number, string or null/i, 'object', -> vimfx.set('hints.chars', ['a', 'b', 'c']) ) -exports['test vimfx.addCommand errors'] = (assert, $vimfx) -> +exports['test vimfx.addCommand errors'] = ($vimfx) -> vimfx = createConfigAPI($vimfx) - throws(assert, /name.+string.+required/i, 'undefined', -> + assert.throws(/name.+string.+required/i, 'undefined', -> vimfx.addCommand() ) - throws(assert, /name.+a-z.+underscore/i, 'Command', -> + assert.throws(/name.+a-z.+underscore/i, 'Command', -> vimfx.addCommand({name: 'Command'}) ) - throws(assert, /name.+a-z.+underscore/i, 'command-name', -> + assert.throws(/name.+a-z.+underscore/i, 'command-name', -> vimfx.addCommand({name: 'command-name'}) ) - throws(assert, /name.+a-z.+underscore/i, 'ö', -> + assert.throws(/name.+a-z.+underscore/i, 'ö', -> vimfx.addCommand({name: 'ö'}) ) - throws(assert, /non-empty description/i, 'undefined', -> + assert.throws(/non-empty description/i, 'undefined', -> vimfx.addCommand({name: 'test'}) ) - throws(assert, /non-empty description/i, '', -> + assert.throws(/non-empty description/i, '', -> vimfx.addCommand({name: 'test', description: ''}) ) - throws(assert, /unknown mode.+available.+normal/i, 'toString', -> + assert.throws(/unknown mode.+available.+normal/i, 'toString', -> vimfx.addCommand({name: 'test', description: 'Test', mode: 'toString'}) ) - throws(assert, /unknown category.+available.+location/i, 'toString', -> + assert.throws(/unknown category.+available.+location/i, 'toString', -> vimfx.addCommand({name: 'test', description: 'Test', category: 'toString'}) ) - throws(assert, /order.+number/i, 'false', -> + assert.throws(/order.+number/i, 'false', -> vimfx.addCommand({name: 'test', description: 'Test', order: false}) ) - throws(assert, /function/i, 'undefined', -> + assert.throws(/function/i, 'undefined', -> vimfx.addCommand({name: 'test', description: 'Test'}) ) - throws(assert, /function/i, 'false', -> + assert.throws(/function/i, 'false', -> vimfx.addCommand({name: 'test_command', description: 'Test command'}, false) ) -exports['test vimfx.add{Option,Key}Overrides errors'] = (assert, $vimfx) -> +exports['test vimfx.add{Option,Key}Overrides errors'] = ($vimfx) -> vimfx = createConfigAPI($vimfx) # Passing nothing is OK, and just shouldn’t throw. vimfx.addOptionOverrides() vimfx.addKeyOverrides() - throws(assert, /array/i, '1', -> + assert.throws(/array/i, '1', -> vimfx.addOptionOverrides(1) ) - throws(assert, /array/i, '1', -> + assert.throws(/array/i, '1', -> vimfx.addKeyOverrides(1) ) - throws(assert, /length 2/i, '0', -> + assert.throws(/length 2/i, '0', -> vimfx.addOptionOverrides([]) ) - throws(assert, /length 2/i, '0', -> + assert.throws(/length 2/i, '0', -> vimfx.addKeyOverrides([]) ) - throws(assert, /length 2/i, '1', -> + assert.throws(/length 2/i, '1', -> vimfx.addOptionOverrides([1]) ) - throws(assert, /length 2/i, '1', -> + assert.throws(/length 2/i, '1', -> vimfx.addKeyOverrides([1]) ) - throws(assert, /length 2/i, '3', -> + assert.throws(/length 2/i, '3', -> vimfx.addOptionOverrides([1, 2, 3]) ) - throws(assert, /length 2/i, '3', -> + assert.throws(/length 2/i, '3', -> vimfx.addKeyOverrides([1, 2, 3]) ) - throws(assert, /function/i, 'null', -> + assert.throws(/function/i, 'null', -> vimfx.addOptionOverrides([null, 2]) ) - throws(assert, /function/i, 'null', -> + assert.throws(/function/i, 'null', -> vimfx.addKeyOverrides([null, 2]) ) - throws(assert, /object/i, 'null', -> + assert.throws(/object/i, 'null', -> vimfx.addOptionOverrides([(-> true), null]) ) - throws(assert, /array of strings/i, '[object Object]', -> + assert.throws(/array of strings/i, '[object Object]', -> vimfx.addKeyOverrides([(-> true), {j: false}]) ) - throws(assert, /array of strings/i, '1,2', -> + assert.throws(/array of strings/i, '1,2', -> vimfx.addKeyOverrides([(-> true), [1, 2]]) ) -exports['test vimfx.{on,off} errors'] = (assert, $vimfx) -> +exports['test vimfx.{on,off} errors'] = ($vimfx) -> vimfx = createConfigAPI($vimfx) - throws(assert, /string/i, 'undefined', -> + assert.throws(/string/i, 'undefined', -> vimfx.on() ) - throws(assert, /string/i, 'undefined', -> + assert.throws(/string/i, 'undefined', -> vimfx.off() ) - throws(assert, /string/i, '1', -> + assert.throws(/string/i, '1', -> vimfx.on(1) ) - throws(assert, /string/i, '1', -> + assert.throws(/string/i, '1', -> vimfx.off(1) ) - throws(assert, /function/i, 'undefined', -> + assert.throws(/function/i, 'undefined', -> vimfx.on('event') ) - throws(assert, /function/i, 'undefined', -> + assert.throws(/function/i, 'undefined', -> vimfx.off('event') ) - throws(assert, /function/i, 'null', -> + assert.throws(/function/i, 'null', -> vimfx.on('event', null) ) - throws(assert, /function/i, 'null', -> + assert.throws(/function/i, 'null', -> vimfx.off('event', null) ) -exports['test vimfx.send errors'] = (assert, $vimfx) -> +exports['test vimfx.send errors'] = ($vimfx) -> vimfx = createConfigAPI($vimfx) vim = new testUtils.MockVim() - throws(assert, /vim object/i, 'undefined', -> + assert.throws(/vim object/i, 'undefined', -> vimfx.send() ) - throws(assert, /vim object/i, '[object Object]', -> + assert.throws(/vim object/i, '[object Object]', -> vimfx.send({mode: 'normal'}) ) - throws(assert, /message string/i, 'undefined', -> + assert.throws(/message string/i, 'undefined', -> vimfx.send(vim) ) - throws(assert, /message string/i, 'false', -> + assert.throws(/message string/i, 'false', -> vimfx.send(vim, false) ) - throws(assert, /not.+function/i, 'function () {}', -> + assert.throws(/not.+function/i, 'function () {}', -> vimfx.send(vim, 'message', ->) ) - throws(assert, /if provided.+function/i, '5', -> + assert.throws(/if provided.+function/i, '5', -> vimfx.send(vim, 'message', null, 5) ) diff --git a/extension/test/test-legacy.coffee b/extension/test/test-legacy.coffee index 480ef3e..78ccb6e 100644 --- a/extension/test/test-legacy.coffee +++ b/extension/test/test-legacy.coffee @@ -1,5 +1,5 @@ ### -# Copyright Simon Lydell 2015. +# Copyright Simon Lydell 2015, 2016. # # This file is part of VimFx. # @@ -17,21 +17,22 @@ # along with VimFx. If not, see . ### +assert = require('./assert') legacy = require('../lib/legacy') -exports['test convertKey'] = (assert) -> - assert.deepEqual(legacy.convertKey('a'), ['a']) - assert.deepEqual(legacy.convertKey('Esc'), ['']) - assert.deepEqual(legacy.convertKey('a,Esc'), ['a', '']) - assert.deepEqual(legacy.convertKey(','), [',']) - assert.deepEqual(legacy.convertKey(',,a'), [',', 'a']) - assert.deepEqual(legacy.convertKey('a,,'), ['a', ',']) - assert.deepEqual(legacy.convertKey('a,,,b'), ['a', ',', 'b']) - assert.deepEqual(legacy.convertKey(',,,,a'), [',', ',', 'a']) - assert.deepEqual(legacy.convertKey('a,,,,'), ['a', ',', ',']) - assert.deepEqual(legacy.convertKey(' a '), ['a']) - assert.deepEqual(legacy.convertKey(''), []) - assert.deepEqual(legacy.convertKey(' '), []) +exports['test convertKey'] = -> + assert.arrayEqual(legacy.convertKey('a'), ['a']) + assert.arrayEqual(legacy.convertKey('Esc'), ['']) + assert.arrayEqual(legacy.convertKey('a,Esc'), ['a', '']) + assert.arrayEqual(legacy.convertKey(','), [',']) + assert.arrayEqual(legacy.convertKey(',,a'), [',', 'a']) + assert.arrayEqual(legacy.convertKey('a,,'), ['a', ',']) + assert.arrayEqual(legacy.convertKey('a,,,b'), ['a', ',', 'b']) + assert.arrayEqual(legacy.convertKey(',,,,a'), [',', ',', 'a']) + assert.arrayEqual(legacy.convertKey('a,,,,'), ['a', ',', ',']) + assert.arrayEqual(legacy.convertKey(' a '), ['a']) + assert.arrayEqual(legacy.convertKey(''), []) + assert.arrayEqual(legacy.convertKey(' '), []) -exports['test convertPattern'] = (assert) -> +exports['test convertPattern'] = -> assert.equal(legacy.convertPattern('aB. t*o! *!'), 'aB\\.\\s+t.*o.\\s+.*.') diff --git a/extension/test/test-parse-prefs.coffee b/extension/test/test-parse-prefs.coffee index 255c898..cd85412 100644 --- a/extension/test/test-parse-prefs.coffee +++ b/extension/test/test-parse-prefs.coffee @@ -17,6 +17,7 @@ # along with VimFx. If not, see . ### +assert = require('./assert') prefs = require('../lib/prefs') resetPrefOnTeardown = (pref, teardown) -> @@ -26,7 +27,7 @@ resetPrefOnTeardown = (pref, teardown) -> ) testPref = (pref, fn) -> - return (assert, $vimfx, teardown) -> + return ($vimfx, teardown) -> resetPrefOnTeardown(pref, teardown) test = (input, output) -> prefs.set(pref, input) @@ -41,12 +42,12 @@ testPref = (pref, fn) -> fn(test) testPrefParsed = (pref, fn) -> - return (assert, $vimfx, teardown) -> + return ($vimfx, teardown) -> resetPrefOnTeardown(pref, teardown) test = (input, fn2) -> prefs.set(pref, input) fn2($vimfx.options[pref]) - fn(assert, test) + fn(test) exports['test hints.chars'] = testPref('hints.chars', (test) -> # Invalid values. @@ -98,7 +99,7 @@ spaceDelimitedStringPrefs.forEach((pref) -> ) ['prev_patterns', 'next_patterns'].forEach((pref) -> - exports["test #{pref} regex"] = testPrefParsed(pref, (assert, test) -> + exports["test #{pref} regex"] = testPrefParsed(pref, (test) -> test('previous previous\\S* foo(', (parsed) -> # Case insensitivity. assert.ok(parsed[0].test('previous')) @@ -131,7 +132,7 @@ spaceDelimitedStringPrefs.forEach((pref) -> ) ) -exports['test blacklist regex'] = testPrefParsed('blacklist', (assert, test) -> +exports['test blacklist regex'] = testPrefParsed('blacklist', (test) -> test('example *EXAMPLE* *example.com/?*=}*', (parsed) -> # Case insensitivity. assert.ok(parsed[0].test('example')) diff --git a/extension/test/test-utils.coffee b/extension/test/test-utils.coffee index 2189bad..9d46fcf 100644 --- a/extension/test/test-utils.coffee +++ b/extension/test/test-utils.coffee @@ -17,9 +17,10 @@ # along with VimFx. If not, see . ### +assert = require('./assert') utils = require('../lib/utils') -exports['test selectAllSubstringMatches'] = (assert) -> +exports['test selectAllSubstringMatches'] = -> window = utils.getCurrentWindow() {document} = window selection = window.getSelection() @@ -148,55 +149,55 @@ exports['test selectAllSubstringMatches'] = (assert) -> [t1, 0, t1, 4, 'tESt'] ]) -exports['test bisect'] = (assert) -> +exports['test bisect'] = -> fn = (num) -> num > 7 # Non-sensical input. - assert.deepEqual(utils.bisect(5, 2, fn), [null, null]) - assert.deepEqual(utils.bisect(7.5, 8, fn), [null, null]) - assert.deepEqual(utils.bisect(7, 8.5, fn), [null, null]) - assert.deepEqual(utils.bisect(7.5, 8.5, fn), [null, null]) + assert.arrayEqual(utils.bisect(5, 2, fn), [null, null]) + assert.arrayEqual(utils.bisect(7.5, 8, fn), [null, null]) + assert.arrayEqual(utils.bisect(7, 8.5, fn), [null, null]) + assert.arrayEqual(utils.bisect(7.5, 8.5, fn), [null, null]) # Unfindable bounds. - assert.deepEqual(utils.bisect(8, 8, fn), [null, 8]) - assert.deepEqual(utils.bisect(7, 7, fn), [7, null]) - assert.deepEqual(utils.bisect(6, 7, fn), [7, null]) - assert.deepEqual(utils.bisect(7, 8, fn), [7, 8]) - assert.deepEqual(utils.bisect(1, 2, (n) -> n == 1), [null, null]) - assert.deepEqual(utils.bisect(0, 0, fn), [0, null]) + assert.arrayEqual(utils.bisect(8, 8, fn), [null, 8]) + assert.arrayEqual(utils.bisect(7, 7, fn), [7, null]) + assert.arrayEqual(utils.bisect(6, 7, fn), [7, null]) + assert.arrayEqual(utils.bisect(7, 8, fn), [7, 8]) + assert.arrayEqual(utils.bisect(1, 2, (n) -> n == 1), [null, null]) + assert.arrayEqual(utils.bisect(0, 0, fn), [0, null]) # Less than. - assert.deepEqual(utils.bisect(0, 7, fn), [7, null]) - assert.deepEqual(utils.bisect(0, 8, fn), [7, 8]) - assert.deepEqual(utils.bisect(1, 8, fn), [7, 8]) - assert.deepEqual(utils.bisect(2, 8, fn), [7, 8]) - assert.deepEqual(utils.bisect(3, 8, fn), [7, 8]) - assert.deepEqual(utils.bisect(4, 8, fn), [7, 8]) - assert.deepEqual(utils.bisect(5, 8, fn), [7, 8]) - assert.deepEqual(utils.bisect(6, 8, fn), [7, 8]) + assert.arrayEqual(utils.bisect(0, 7, fn), [7, null]) + assert.arrayEqual(utils.bisect(0, 8, fn), [7, 8]) + assert.arrayEqual(utils.bisect(1, 8, fn), [7, 8]) + assert.arrayEqual(utils.bisect(2, 8, fn), [7, 8]) + assert.arrayEqual(utils.bisect(3, 8, fn), [7, 8]) + assert.arrayEqual(utils.bisect(4, 8, fn), [7, 8]) + assert.arrayEqual(utils.bisect(5, 8, fn), [7, 8]) + assert.arrayEqual(utils.bisect(6, 8, fn), [7, 8]) # Greater than. - assert.deepEqual(utils.bisect(7, 9, fn), [7, 8]) - assert.deepEqual(utils.bisect(7, 10, fn), [7, 8]) - assert.deepEqual(utils.bisect(7, 11, fn), [7, 8]) - assert.deepEqual(utils.bisect(7, 12, fn), [7, 8]) - assert.deepEqual(utils.bisect(7, 13, fn), [7, 8]) - assert.deepEqual(utils.bisect(7, 14, fn), [7, 8]) - assert.deepEqual(utils.bisect(7, 15, fn), [7, 8]) - assert.deepEqual(utils.bisect(7, 16, fn), [7, 8]) + assert.arrayEqual(utils.bisect(7, 9, fn), [7, 8]) + assert.arrayEqual(utils.bisect(7, 10, fn), [7, 8]) + assert.arrayEqual(utils.bisect(7, 11, fn), [7, 8]) + assert.arrayEqual(utils.bisect(7, 12, fn), [7, 8]) + assert.arrayEqual(utils.bisect(7, 13, fn), [7, 8]) + assert.arrayEqual(utils.bisect(7, 14, fn), [7, 8]) + assert.arrayEqual(utils.bisect(7, 15, fn), [7, 8]) + assert.arrayEqual(utils.bisect(7, 16, fn), [7, 8]) # Various cases. - assert.deepEqual(utils.bisect(0, 9, fn), [7, 8]) - assert.deepEqual(utils.bisect(5, 9, fn), [7, 8]) - assert.deepEqual(utils.bisect(6, 10, fn), [7, 8]) - assert.deepEqual(utils.bisect(0, 12345, fn), [7, 8]) + assert.arrayEqual(utils.bisect(0, 9, fn), [7, 8]) + assert.arrayEqual(utils.bisect(5, 9, fn), [7, 8]) + assert.arrayEqual(utils.bisect(6, 10, fn), [7, 8]) + assert.arrayEqual(utils.bisect(0, 12345, fn), [7, 8]) -exports['test removeDuplicates'] = (assert) -> - assert.deepEqual(utils.removeDuplicates( +exports['test removeDuplicates'] = -> + assert.arrayEqual(utils.removeDuplicates( [1, 1, 2, 1, 3, 2]), [1, 2, 3] ) - assert.deepEqual(utils.removeDuplicates( + assert.arrayEqual(utils.removeDuplicates( ['a', 'b', 'c', 'b', 'd', 'a']), ['a', 'b', 'c', 'd'] ) diff --git a/extension/test/utils.coffee b/extension/test/utils.coffee index 5c5e03b..985c34e 100644 --- a/extension/test/utils.coffee +++ b/extension/test/utils.coffee @@ -26,13 +26,6 @@ stub = (obj, method, fn) -> obj[method] = fn return -> obj[method] = originalFn -throws = (assert, regex, badValue, fn) -> - assert.throws(fn) - try fn() catch error - assert.ok(error.message.startsWith('VimFx:'), 'start with VimFx') - assert.ok(error.message.endsWith(": #{badValue}"), 'show bad value') - assert.ok(regex.test(error.message), 'regex match') - class MockMessageManager constructor: -> @sendAsyncMessageCalls = 0 @@ -48,7 +41,6 @@ class MockVim extends Vim module.exports = { stub - throws MockMessageManager MockVim } -- 2.39.3