-
Notifications
You must be signed in to change notification settings - Fork 1
/
snippets.test.js
74 lines (57 loc) · 2.23 KB
/
snippets.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
/*global define QUnit*/
(function (root, factory) {
"use strict";
if (typeof define === 'function' && define.amd) {
define(['qunit', 'squim'], function (Q, Squim) {
return (root.SnippetsTest = factory(Q, Squim));
});
} else {
root.SnippetsTest = factory(root.QUnit, root.Squim);
}
}(this, function (Q, Squim) {
"use strict";
var obj = {};
obj.test = function () {
var _ground;
Q.module("Squim snippets");
function aliasSquimName(names, env) {
var name, newName;
env.inmutable = false;
for (name in names) {
newName = names[name];
env.define(newName, env.get(name));
}
env.inmutable = true;
}
/* Squim related functions */
function getGround() {
if (_ground === undefined) {
_ground = Squim.types.Env.makeGround();
aliasSquimName({"$define!": "set"}, _ground);
}
return _ground;
}
function runCode(code, bindings) {
var env = new Squim.types.Env.fromJsObject(bindings || {}, [getGround()]);
Squim.run(code, env);
return env;
}
Q.test("block with sets and $cond", function () {
var result, values, code = '($sequence (set itemId item) (set text (+ (value group) :{hint "objattrs"} ":" item "->" (value value) :{hint "objattrs"})) (set symbol "○") (set color ($cond ((<? (value value) 30) :{hint "compare"} "#3c3" :{format "color"}) ((<? (value value) 60) :{hint "compare"} "#cc3" :{format "color"}) (#t "#c33" :{format "color"}))) (set groupName (value group) :{hint "objattrs"}))';
result = runCode(code, {
"item": "server",
"value": {
"group": "g1",
"value": 59
}
});
values = result.bindings;
Q.equal(values.itemId.value, "server");
Q.equal(values.text.value, "g1:server->59");
Q.equal(values.symbol.value, "○");
Q.equal(values.color.value, "#cc3");
Q.equal(values.groupName.value, "g1");
});
};
return obj;
}));