1 | suite 'Parser', ->
|
2 |
|
3 | setup ->
|
4 | @shouldParse = (input) -> doesNotThrow -> parse input
|
5 | @shouldNotParse = (input) -> throws -> parse input
|
6 |
|
7 |
|
8 | test 'empty program', -> @shouldParse ''
|
9 | test 'simple number', -> @shouldParse '0'
|
10 |
|
11 | test 'simple error', -> @shouldNotParse '0+'
|
12 |
|
13 | test 'deeply nested expressions', ->
|
14 | @shouldParse '((((((((((((((((((((0))))))))))))))))))))'
|
15 | @shouldParse '++++++++++++++++++++0'
|
16 |
|
17 | test '#142 inconsistently indented object literal', ->
|
18 | inconsistently =
|
19 | indented:
|
20 | object:
|
21 | literal: yes
|
22 | eq inconsistently.indented.object.literal, yes
|
23 |
|
24 | test 'inconsistently indented if statement', ->
|
25 | nonceA = {}
|
26 | nonceB = {}
|
27 |
|
28 | fn = (b) ->
|
29 | if b
|
30 | nonceA
|
31 | else
|
32 | nonceB
|
33 |
|
34 | eq nonceA, fn 1
|
35 | eq nonceB, fn 0
|
36 |
|
37 | test 'inconsistent object literal dedent', ->
|
38 | @shouldNotParse '''
|
39 | obj =
|
40 | foo: 5
|
41 | bar: 6
|
42 | '''
|
43 |
|
44 | test 'inconsistent if statement dedent', ->
|
45 | @shouldNotParse '''
|
46 | f = ->
|
47 | if something
|
48 | 'yup'
|
49 | else
|
50 | 'nope'
|
51 | '''
|
52 |
|
53 | test 'windows line endings', ->
|
54 | @shouldParse 'if test\r\n fn a\r\n\r\n fn b'
|