fix(object-freezing): Null is an object, but not a freezable one

Resolves T1141
This commit is contained in:
Ben Gotow 2015-05-11 14:18:14 -07:00
parent e2cd2e41ba
commit 958eceec56
2 changed files with 19 additions and 2 deletions

View file

@ -1,5 +1,7 @@
_ = require('underscore-plus')
Utils = require '../src/flux/models/utils'
Thread = require '../src/flux/models/thread'
Contact = require '../src/flux/models/contact'
class Foo
constructor: (@instanceVar) ->
@ -13,6 +15,20 @@ class Bar extends Foo
@moreStuff = stuff
@method(stuff)
describe "modelFreeze", ->
it "should freeze the object", ->
o =
a: 1
b: 2
Utils.modelFreeze(o)
expect(Object.isFrozen(o)).toBe(true)
it "should not throw an exception when nulls appear in strange places", ->
t = new Thread(participants: [new Contact(email: 'ben@nylas.com'), null], subject: '123')
Utils.modelFreeze(t)
expect(Object.isFrozen(t)).toBe(true)
expect(Object.isFrozen(t.participants[0])).toBe(true)
describe "deepClone", ->
beforeEach ->
@v1 = [1,2,3]

View file

@ -114,8 +114,9 @@ Utils =
modelFreeze: (o) ->
Object.freeze(o)
for key, prop of o
if !o.hasOwnProperty(key) || typeof prop isnt 'object' || Object.isFrozen(prop)
continue
continue unless o.hasOwnProperty(key)
continue unless typeof prop is 'object' and prop isnt null
continue if Object.isFrozen(prop)
Utils.modelFreeze(prop)
modelReviver: (k, v) ->