jashkenas--coffeescript/test/test_literals.coffee

230 lines
3.4 KiB
CoffeeScript
Raw Normal View History

2010-07-25 05:23:37 +00:00
a = [((x) -> x), ((x) -> x * x)]
ok a.length is 2
2010-07-25 05:23:37 +00:00
regex = /match/i
words = "I think there is a match in here."
ok !!words.match(regex)
2010-01-01 15:17:33 +00:00
2010-07-25 05:23:37 +00:00
neg = (3 -4)
2010-01-01 15:17:33 +00:00
ok neg is -1
# Decimal number literals.
2010-07-25 05:23:37 +00:00
value = .25 + .75
ok value is 1
2010-07-25 05:23:37 +00:00
value = 0.0 + -.25 - -.75 + 0.0
ok value is 0.5
# Decimals don't interfere with ranges.
ok [0..10].join(' ') is '0 1 2 3 4 5 6 7 8 9 10'
ok [0...10].join(' ') is '0 1 2 3 4 5 6 7 8 9'
2010-06-01 02:56:51 +00:00
# Can call methods directly on numbers.
4.valueOf() is 4
2010-06-01 02:56:51 +00:00
2010-07-25 05:23:37 +00:00
func = ->
return if true
ok func() is null
2010-07-25 05:23:37 +00:00
str = "\\"
reg = /\\/
ok reg(str) and str is '\\'
2010-07-25 05:23:37 +00:00
trailingComma = [1, 2, 3,]
ok (trailingComma[0] is 1) and (trailingComma[2] is 3) and (trailingComma.length is 3)
2010-07-25 05:23:37 +00:00
trailingComma = [
1, 2, 3,
4, 5, 6
7, 8, 9,
]
2010-07-25 05:23:37 +00:00
(sum = (sum or 0) + n) for n in trailingComma
2010-07-25 05:23:37 +00:00
trailingComma = {k1: "v1", k2: 4, k3: (-> true),}
ok trailingComma.k3() and (trailingComma.k2 is 4) and (trailingComma.k1 is "v1")
money$ = '(((dollars)))'
ok money$ is '\(\(\(dollars\)\)\)'
2010-02-03 01:36:46 +00:00
2010-07-25 05:23:37 +00:00
multiline = "one
two
three"
ok multiline is 'one two three'
ok {a: (num) -> num is 10 }.a 10
2010-07-25 05:23:37 +00:00
moe = {
name: 'Moe'
2010-02-03 01:36:46 +00:00
greet: (salutation) ->
salutation + " " + @name
hello: ->
2010-02-21 01:09:52 +00:00
@['greet'] "Hello"
10: 'number'
2010-02-03 01:36:46 +00:00
}
ok moe.hello() is "Hello Moe"
ok moe[10] is 'number'
2010-07-25 05:23:37 +00:00
moe.hello = ->
this['greet'] "Hello"
ok moe.hello() is 'Hello Moe'
2010-07-25 05:23:37 +00:00
obj = {
is: -> yes,
'not': -> no,
}
ok obj.is()
ok not obj.not()
# Top-level object literal doesn't break things.
obj: 1
# Funky indentation within non-comma-seperated arrays.
2010-07-25 05:23:37 +00:00
result = [['a']
{b: 'c'}]
ok result[0][0] is 'a'
ok result[1]['b'] is 'c'
# Object literals should be able to include keywords.
2010-07-25 05:23:37 +00:00
obj = {class: 'höt'}
obj.function = 'dog'
ok obj.class + obj.function is 'hötdog'
# But keyword assignment should be smart enough not to stringify variables.
2010-07-25 05:23:37 +00:00
func = ->
this == 'this'
ok func() is false
# New fancy implicit objects:
config =
development:
server: 'localhost'
timeout: 10
production:
server: 'dreamboat'
timeout: 1000
ok config.development.server is 'localhost'
ok config.production.server is 'dreamboat'
ok config.development.timeout is 10
ok config.production.timeout is 1000
obj =
a: 1
b: 2
ok obj.a is 1
ok obj.b is 2
obj =
a: 1,
b: 2,
ok obj.a is 1
ok obj.b is 2
# Implicit objects nesting.
obj =
options:
value: yes
fn: ->
{}
null
ok obj.options.value is yes
2010-07-31 11:44:49 +00:00
ok obj.fn() is null
# Implicit arguments to function calls:
func = (obj) -> obj.a
result = func
a: 10
ok result is 10
result = func
"a": 20
ok result is 20
2010-08-19 00:42:23 +00:00
third = (a, b, c) -> c
obj =
one: 'one'
two: third 'one', 'two', 'three'
ok obj.one is 'one'
ok obj.two is 'three'
2010-07-31 11:44:49 +00:00
# Implicit objects with wacky indentation:
obj =
'reverse': (obj) ->
2010-07-31 11:44:49 +00:00
Array.prototype.reverse.call obj
abc: ->
@reverse(
@reverse @reverse ['a', 'b', 'c'].reverse()
)
one: [1, 2,
a: 'b'
3, 4]
red:
orange:
yellow:
green: 'blue'
indigo: 'violet'
misdent: [[],
[],
[],
[]]
ok obj.abc().join(' ') is 'a b c'
ok obj.one.length is 5
ok obj.one[4] is 4
ok obj.one[2].a is 'b'
ok (key for key of obj.red).length is 2
ok obj.red.orange.yellow.green is 'blue'
ok obj.red.indigo is 'violet'
ok obj.misdent.toString() is ',,,'
second = (x, y) -> y
obj = then second 'the',
1: 1
two:
three: ->
four five,
six: seven
three: 3
ok obj[1] is 1
ok obj.three is 3