jashkenas--coffeescript/test/test_existence.coffee

81 lines
1.3 KiB
CoffeeScript

ok(if mySpecialVariable? then false else true)
mySpecialVariable: false
ok(if mySpecialVariable? then true else false)
# Existential assignment.
a: 5
a: null
a ?= 10
b ?= 10
ok a is 10 and b is 10
# The existential operator.
z: null
x: z ? "EX"
ok z is null and x is "EX"
# Only evaluate once.
counter: 0
getNextNode: ->
throw "up" if counter
counter++
ok(if getNextNode()? then true else false)
# Existence chains, soaking up undefined properties:
obj: {
prop: "hello"
}
ok obj?.prop is "hello"
ok obj?['prop'] is "hello"
ok obj.prop?.length is 5
ok obj?['prop']?['length'] is 5
ok obj?.prop?.non?.existent?.property is undefined
ok obj?['non']?['existent'].property is undefined
# Soaks and caches method calls as well.
arr: ["--", "----"]
ok arr.pop()?.length is 4
ok arr.pop()?.length is 2
ok arr.pop()?.length is undefined
ok arr[0]?.length is undefined
ok arr.pop()?.length?.non?.existent()?.property is undefined
# Soaks method calls safely.
value: undefined
result: value?.toString().toLowerCase()
ok result is undefined
value: 10
result: value?.toString().toLowerCase()
ok result is '10'
# Safely existence test on soaks.
result: not value?.property?
ok result
# Safely calls values off of non-existent variables.
result: nothing?.value
ok result is undefined