-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapplication.js
56 lines (43 loc) · 1.64 KB
/
application.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
var lexer = require('../../index').lex.lexer;
var parser = require('../../index').parse.parser;
var $ = require('../$');
var testParser = function(stream) {
var result = parser.parseStream(lexer.lex(stream));
return result.body[0].expression;
};
exports.assoc = function(test) {
var result = testParser("f 1 2 3;");
test.equal(result.type, 'CallExpression');
test.equal(result.args.length, 1);
$.number(test, result.args[0], 3);
test.equal(result.callee.type, 'CallExpression');
$.number(test, result.callee.args[0], 2);
test.equal(result.callee.callee.type, 'CallExpression');
$.number(test, result.callee.callee.args[0], 1);
test.done();
};
exports.operator = function(test) {
var result = testParser("f (+);");
test.equal(result.type, 'CallExpression');
test.equal(result.args.length, 1);
test.equal(result.args[0].type, 'OperatorExpression');
test.done();
};
exports.curried_operator = function(test) {
var result = testParser("f (+, 1);");
test.equal(result.type, 'CallExpression');
test.equal(result.args.length, 1);
test.equal(result.args[0].type, 'CurryExpression');
test.equal(result.args[0].base.type, 'OperatorExpression');
test.equal(result.args[0].args.length, 1);
test.done();
};
exports.lambda = function(test) {
var result = testParser("f \\ x -> x;");
test.equal(result.type, 'CallExpression');
test.equal(result.args.length, 1);
test.equal(result.args[0].type, 'FunctionExpression');
test.equal(result.args[0].params.elements.length, 1);
$.idPattern(test, result.args[0].params.elements[0], 'x');
test.done();
};