mirror of
https://github.com/atom/atom.git
synced 2026-04-28 03:01:47 -04:00
Throw an error when adding an invalid selector
This commit is contained in:
@@ -148,6 +148,16 @@ describe "CommandRegistry", ->
|
||||
grandchild.dispatchEvent(new CustomEvent('command-2', bubbles: true))
|
||||
expect(calls).toEqual []
|
||||
|
||||
describe "::add(selector, commandName, callback)", ->
|
||||
it "throws an error when called with an invalid selector", ->
|
||||
badSelector = '<>'
|
||||
addError = null
|
||||
try
|
||||
registry.add badSelector, 'foo:bar', ->
|
||||
catch error
|
||||
addError = error
|
||||
expect(addError.message).toContain(badSelector)
|
||||
|
||||
describe "::findCommands({target})", ->
|
||||
it "returns commands that can be invoked on the target or its ancestors", ->
|
||||
registry.add '.parent', 'namespace:command-1', ->
|
||||
|
||||
@@ -87,6 +87,8 @@ class CommandRegistry
|
||||
return disposable
|
||||
|
||||
if typeof target is 'string'
|
||||
unless @isSelectorValid(target)
|
||||
throw new Error("'#{target}' is not a valid selector")
|
||||
@addSelectorBasedListener(target, commandName, callback)
|
||||
else
|
||||
@addInlineListener(target, commandName, callback)
|
||||
@@ -235,6 +237,20 @@ class CommandRegistry
|
||||
window.addEventListener(commandName, @handleCommandEvent, true)
|
||||
@registeredCommands[commandName] = true
|
||||
|
||||
isSelectorValid: (selector) ->
|
||||
@selectorCache ?= {}
|
||||
cachedValue = @selectorCache[selector]
|
||||
return cachedValue if cachedValue?
|
||||
|
||||
@testElement ?= document.createElement('div')
|
||||
try
|
||||
@testElement.webkitMatchesSelector(selector)
|
||||
@selectorCache[selector] = true
|
||||
true
|
||||
catch selectorError
|
||||
@selectorCache[selector] = false
|
||||
false
|
||||
|
||||
class SelectorBasedListener
|
||||
constructor: (@selector, @callback) ->
|
||||
@specificity = (SpecificityCache[@selector] ?= specificity(@selector))
|
||||
|
||||
Reference in New Issue
Block a user