-
Notifications
You must be signed in to change notification settings - Fork 55
Expand file tree
/
Copy pathjava_errors_spec.coffee
More file actions
122 lines (111 loc) · 3.79 KB
/
Copy pathjava_errors_spec.coffee
File metadata and controls
122 lines (111 loc) · 3.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
Aether = require '../aether'
lodash = require 'lodash'
language = 'java'
aether = new Aether language: language
checkRange = (problem, code, start) ->
if start
expect(problem.range[0].row).toEqual(start.row)
expect(problem.range[0].col).toEqual(start.col)
xdescribe "#{language} Errors Test suite", ->
describe "Syntax Errors", ->
it "no class", ->
code = """
hero.moveLeft()
"""
aether = new Aether language: language
aether.transpile code
expect(aether.problems.errors.length).toEqual(1)
expect(aether.problems.errors[0].message).toEqual('class, interface, or enum expected')
checkRange(aether.problems.errors[0], code, {row: 0, col: 0})
it "not a statement", ->
code = """
public class Main {
public static void main(String[] args) {
2+2;
}
}
"""
aether = new Aether language: language
aether.transpile code
expect(aether.problems.errors.length).toEqual(1)
expect(aether.problems.errors[0].message).toEqual('not a statement')
checkRange(aether.problems.errors[0], code, {row: 3, col: 4})
it "no semicolon", ->
code = """
public class Main {
public static void main(String[] args) {
hero.moveLeft()
}
}
"""
aether = new Aether language: language
aether.transpile code
expect(aether.problems.errors.length).toEqual(1)
expect(aether.problems.errors[0].message).toEqual("';' expected")
checkRange(aether.problems.errors[0], code, {row: 3, col: 19})
it "space instead of peroid in call", ->
code = """
public class Main {
public static void main(String[] args) {
hero moveLeft()
}
}
"""
aether = new Aether language: language
aether.transpile code
expect(aether.problems.errors.length).toEqual(1)
expect(aether.problems.errors[0].message).toEqual("';' expected")
checkRange(aether.problems.errors[0], code, {row: 3, col: 5})
it "unclosed comment", ->
code = """
public class Main {
public static void main(String[] args) {
/*
}
}
"""
aether = new Aether language: language
aether.transpile code
expect(aether.problems.errors.length).toEqual(1)
expect(aether.problems.errors[0].message).toEqual("reached end of file while parsing")
checkRange(aether.problems.errors[0], code, {row: 3, col: 5})
it "unclosed if", ->
code = """
public class Main {
public static void main(String[] args) {
hero.moveLeft();
if ( true ) {
hero.moveRight();
}
}
"""
aether = new Aether language: language
aether.transpile code
expect(aether.problems.errors.length).toEqual(1)
expect(aether.problems.errors[0].message).toEqual("reached end of file while parsing")
checkRange(aether.problems.errors[0], code, {row: 6, col: 1})
it "dangeling type", ->
code = """
public class Main {
public static void main(String[] args) {
hero.moveLeft();
int;
}
}
"""
aether = new Aether language: language
aether.transpile code
expect(aether.problems.errors.length).toEqual(1)
expect(aether.problems.errors[0].message).toEqual("not a statement")
checkRange(aether.problems.errors[0], code, {row: 4, col: 5})
it "no method", ->
code = """
public class Main {
moveLeft()
}
"""
aether = new Aether language: language
aether.transpile code
expect(aether.problems.errors.length).toEqual(1)
expect(aether.problems.errors[0].message).toEqual("invalid method declaration; return type required")
checkRange(aether.problems.errors[0], code, {row: 3, col: 3})