-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathparser.test.js
76 lines (68 loc) · 1.84 KB
/
parser.test.js
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
const Tokenizer = require('./tokenizer')
const Parser = require('./parser')
const token = Tokenizer.tokenEnum
const parseString = str => {
const tokenizer = new Tokenizer(str)
const tokens = tokenizer.scanTokens()
const parser = new Parser(tokens)
return parser
}
describe('Expression Parsing', () => {
test('Parses primary characters correctly', () => {
const primaries = [
// Numbers
`3`,
`321`,
`.3`,
`.321`,
`321.123`,
// Strings
`""`,
`"hello"`,
`"
<strong>
Independent Woman
</strong>
"`,
// True
`true`,
// False
`false`,
// Nil
`nil`
]
for (let primary of primaries) {
expect(parseString(primary).expression()).toMatchSnapshot()
}
})
test('Parses unaries correctly', () => {
const unaries = [`-3`, `!3`]
for (const u of unaries) {
expect(parseString(u).expression()).toMatchSnapshot()
}
})
test('Parses multiplication correctly', () => {
const mult = [`3 * 1`, `-2 * 2`, `-3 * -3`, `3 / 1`, `-2 / 2`, `-3 / -3`]
for (const u of mult) {
expect(parseString(u).expression()).toMatchSnapshot()
}
})
test('Parses addition correctly', () => {
const add = [`3 + 1`, `-2 + 2`, `-3 + -3`, `3 - 1`, `-2 - 2`, `-3 - -3`]
for (const u of add) {
expect(parseString(u).expression()).toMatchSnapshot()
}
})
test('Parses comparison correctly', () => {
const comp = [`3 > 1`, `2 < 2`, `3 <= 3`, `3 >= 1`]
for (const u of comp) {
expect(parseString(u).expression()).toMatchSnapshot()
}
})
test('Parses equality correctly', () => {
const equals = [`3 == 3`, `3 != 2`, `3 != -3`, `-3 != -3`, `!true != true`, `!true == !true`]
for (const u of equals) {
expect(parseString(u).expression()).toMatchSnapshot()
}
})
})