Throw away serialized state if its version doesn't match deserializer

This commit is contained in:
Corey Johnson & Nathan Sobo
2013-03-06 16:06:17 -08:00
committed by probablycorey
parent 4f0bf9020b
commit 8333f14ef8
2 changed files with 34 additions and 1 deletions

View File

@@ -130,3 +130,34 @@ describe "Window", ->
window.installAtomCommand(commandPath)
expect(fs.exists(commandPath)).toBeTruthy()
expect(fs.read(commandPath).length).toBeGreaterThan 1
describe ".deserialize(state)", ->
class Foo
@deserialize: ({name}) -> new Foo(name)
constructor: (@name) ->
beforeEach ->
registerDeserializer(Foo)
afterEach ->
unregisterDeserializer(Foo)
it "calls deserialize on the deserializer for the given state object, or returns undefined if one can't be found", ->
object = deserialize({ deserializer: 'Foo', name: 'Bar' })
expect(object.name).toBe 'Bar'
expect(deserialize({ deserializer: 'Bogus' })).toBeUndefined()
describe "when the deserializer has a version", ->
beforeEach ->
Foo.version = 2
describe "when the deserialized state has a matching version", ->
it "attempts to deserialize the state", ->
object = 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(deserialize({ deserializer: 'Foo', version: 3, name: 'Bar' })).toBeUndefined()
expect(deserialize({ deserializer: 'Foo', version: 1, name: 'Bar' })).toBeUndefined()
expect(deserialize({ deserializer: 'Foo', name: 'Bar' })).toBeUndefined()

View File

@@ -155,7 +155,9 @@ window.unregisterDeserializer = (klass) ->
delete deserializers[klass.name]
window.deserialize = (state) ->
getDeserializer(state)?.deserialize(state)
if deserializer = getDeserializer(state)
return if deserializer.version? and deserializer.version isnt state.version
deserializer.deserialize(state)
window.getDeserializer = (state) ->
deserializers[state?.deserializer]