Return a Disposable instance from DeserializerManager::add

Esse commit está contido em:
Nathan Sobo
2014-09-30 12:43:57 -06:00
commit 8cb8f09803
2 arquivos alterados com 35 adições e 20 exclusões
+31 -20
Ver Arquivo
@@ -1,33 +1,44 @@
DeserializerManager = require '../src/deserializer-manager' DeserializerManager = require '../src/deserializer-manager'
describe ".deserialize(state)", -> describe "DeserializerManager", ->
deserializer = null manager = null
class Foo class Foo
@deserialize: ({name}) -> new Foo(name) @deserialize: ({name}) -> new Foo(name)
constructor: (@name) -> constructor: (@name) ->
beforeEach -> beforeEach ->
deserializer = new DeserializerManager() manager = new DeserializerManager
deserializer.add(Foo)
it "calls deserialize on the deserializer for the given state object, or returns undefined if one can't be found", -> describe "::add(deserializer)", ->
spyOn(console, 'warn') it "returns a disposable that can be used to remove the manager", ->
object = deserializer.deserialize({ deserializer: 'Foo', name: 'Bar' }) disposable = manager.add(Foo)
expect(object.name).toBe 'Bar' expect(manager.deserialize({deserializer: 'Foo', name: 'Bar'})).toBeDefined()
expect(deserializer.deserialize({ deserializer: 'Bogus' })).toBeUndefined() disposable.dispose()
spyOn(console, 'warn')
expect(manager.deserialize({deserializer: 'Foo', name: 'Bar'})).toBeUndefined()
describe "when the deserializer has a version", -> describe "::deserialize(state)", ->
beforeEach -> beforeEach ->
Foo.version = 2 manager.add(Foo)
describe "when the deserialized state has a matching version", -> it "calls deserialize on the manager for the given state object, or returns undefined if one can't be found", ->
it "attempts to deserialize the state", -> spyOn(console, 'warn')
object = deserializer.deserialize({ deserializer: 'Foo', version: 2, name: 'Bar' }) object = manager.deserialize({deserializer: 'Foo', name: 'Bar'})
expect(object.name).toBe 'Bar' expect(object.name).toBe 'Bar'
expect(manager.deserialize({deserializer: 'Bogus'})).toBeUndefined()
describe "when the deserialized state has a non-matching version", -> describe "when the manager has a version", ->
it "returns undefined", -> beforeEach ->
expect(deserializer.deserialize({ deserializer: 'Foo', version: 3, name: 'Bar' })).toBeUndefined() Foo.version = 2
expect(deserializer.deserialize({ deserializer: 'Foo', version: 1, name: 'Bar' })).toBeUndefined()
expect(deserializer.deserialize({ deserializer: 'Foo', name: 'Bar' })).toBeUndefined() describe "when the deserialized state has a matching version", ->
it "attempts to deserialize the state", ->
object = manager.deserialize({deserializer: 'Foo', version: 2, name: 'Bar'})
expect(object.name).toBe 'Bar'
describe "when the deserialized state has a non-matching version", ->
it "returns undefined", ->
expect(manager.deserialize({deserializer: 'Foo', version: 3, name: 'Bar'})).toBeUndefined()
expect(manager.deserialize({deserializer: 'Foo', version: 1, name: 'Bar'})).toBeUndefined()
expect(manager.deserialize({deserializer: 'Foo', name: 'Bar'})).toBeUndefined()
+4
Ver Arquivo
@@ -1,3 +1,5 @@
{Disposable} = require 'event-kit'
# Extended: Manages the deserializers used for serialized state # Extended: Manages the deserializers used for serialized state
# #
# An instance of this class is always available as the `atom.deserializers` # An instance of this class is always available as the `atom.deserializers`
@@ -27,6 +29,8 @@ class DeserializerManager
# * `classes` One or more classes to register. # * `classes` One or more classes to register.
add: (classes...) -> add: (classes...) ->
@deserializers[klass.name] = klass for klass in classes @deserializers[klass.name] = klass for klass in classes
new Disposable =>
delete @deserializers[klass.name] for klass in classes
# Public: Remove the given class(es) as deserializers. # Public: Remove the given class(es) as deserializers.
# #