peasy
Version:
an easy but powerful parser
102 lines (95 loc) • 5.54 kB
JavaScript
(function() {var ts = twoside('peasy/karma/samples-dsl.js'), require = ts.require, exports = ts.exports, module = ts.module; // wrap line by gulp-twoside for providing twoside module
var parseTemplate, peasy;
peasy = require('../peasy');
parseTemplate = require('../samples/dsl').parseTemplate;
describe("run samples/testdsl:", function() {
return it('', function() {});
});
describe("parse template", function() {
it("parse @) shold throw error", function() {
return expect(function() {
return parseTemplate('@)');
}).toThrow();
});
it("parse @x()) shold throw error", function() {
return expect(function() {
return parseTemplate('@x())');
}).toThrow();
});
it("should parse 'x'", function() {
return expect(parseTemplate('x')).toBe('t.transform(e.x)');
});
it("should parse 'x!y'", function() {
return expect(parseTemplate('x!y')).toBe('t.transform(e.x),t.transform(e.y)');
});
it("should parse '@if_(x!y)'", function() {
return expect(parseTemplate('@if_(x!y)')).toBe('t.if_(t.transform(e.x),t.transform(e.y))');
});
it("should parse '@if_(x!!!y)'", function() {
return expect(parseTemplate('@if_(x!!!y)')).toBe('t.if_(t.transform(e.x),"!",t.transform(e.y))');
});
it("should parse '@x", function() {
return expect(parseTemplate('@x')).toBe('t.x');
});
it("should parse '@x@y", function() {
return expect(parseTemplate('@x@y')).toBe('t.x,t.y');
});
it("should parsen !)", function() {
return expect(parseTemplate('!)')).toBe('")"');
});
it("should parsen ;23445", function() {
return expect(parseTemplate(';23445')).toBe('";23445"');
});
it("should parsen ;23445qwe", function() {
return expect(parseTemplate(';23445qwe')).toBe('";23445",t.transform(e.qwe)');
});
it("should parsen ;23445!qwe", function() {
return expect(parseTemplate(';23445!qwe')).toBe('";23445qwe"');
});
it("should parsen ;23445!!qwe", function() {
return expect(parseTemplate(';23445!!qwe')).toBe('";23445!",t.transform(e.qwe)');
});
it("should parsen @whileLoop(!while @paren(item)\n@block(body))", function() {
return expect(parseTemplate('@whileLoop(!while @paren(item)\n@block(body))')).toBe("t.whileLoop(\"while \",t.paren(t.transform(e.item)),\"\\n\",t.block(t.transform(e.body)))");
});
it('should parse "value"', function() {
return expect(parseTemplate('"value"')).toBe('\'"\',t.transform(e.value),\'"\'');
});
it("should parse @array(items)", function() {
return expect(parseTemplate('@array(items)')).toBe('t.array(t.transform(e.items))');
});
it("should parse @if_(!if @paren(test)\n@block(then_)@may(\n!else @block(else_)))", function() {
return expect(parseTemplate('@if_(!if @paren(test)\n@block(then_)@may(\n!else @block(else_)))')).toBe('t.if_("if ",t.paren(t.transform(e.test)),"\\n",t.block(t.transform(e.then_)),t.may("\\nelse ",t.block(t.transform(e.else_))))');
});
it("should parse '@forInLoop(!for @paren(item !in range)\n@block(body))'", function() {
return expect(parseTemplate('@forInLoop(!for @paren(item !in range)\n@block(body))')).toBe('t.forInLoop("for ",t.paren(t.transform(e.item)," in ",t.transform(e.range)),"\\n",t.block(t.transform(e.body)))');
});
it("should parse @whileLoop(!while @paren(item)\n@block(body))", function() {
return expect(parseTemplate('@whileLoop(!while @paren(item)\n@block(body))')).toBe('t.whileLoop("while ",t.paren(t.transform(e.item)),"\\n",t.block(t.transform(e.body)))');
});
it("should parse @tryCatch(!try @block(test)\ncatcher@may(\n!finally @block(final)))", function() {
return expect(parseTemplate('@tryCatch(!try @block(test)\ncatcher@may(\n!finally @block(final)))')).toBe('t.tryCatch("try ",t.block(t.transform(e.test)),"\\n",t.transform(e.catcher),t.may("\\nfinally ",t.block(t.transform(e.final))))');
});
it("should parsen !catch @paren(variable@may(!if test))@block(\nbody)", function() {
return expect(parseTemplate('!catch @paren(variable@may(!if test))@block(\nbody)')).toBe('"catch ",t.paren(t.transform(e.variable),t.may("if ",t.transform(e.test))),t.block("\\n",t.transform(e.body))');
});
it("should parsen !throw value", function() {
return expect(parseTemplate('!throw value')).toBe('"throw ",t.transform(e.value)');
});
it("should parsen caller@paren(@list(args))", function() {
return expect(parseTemplate('caller@paren(@list(args))')).toBe('t.transform(e.caller),t.paren(t.list(t.transform(e.args)))');
});
it("should parsen !var @list(vars)", function() {
return expect(parseTemplate('left = right')).toBe('t.transform(e.left)," = ",t.transform(e.right)');
});
it("left @op(operator) = right", function() {
return expect(parseTemplate('left @op(operator) = right')).toBe('t.transform(e.left)," ",t.op(t.transform(e.operator))," = ",t.transform(e.right)');
});
it("should parsen @switch_(!switch @paren(expression) \n@block(@list(cases @empty)) @may(\n!default: @block(else)))", function() {
return expect(parseTemplate('@switch_(!switch @paren(expression) \n@block(@list(cases @empty)) @may(\n!default: @block(else)))')).toBe('t.switch_("switch ",t.paren(t.transform(e.expression))," \\n",t.block(t.list(t.transform(e.cases)," ",t.empty))," ",t.may("\\ndefault: ",t.block(t.transform(e.else))))');
});
return it("!case test: \n@block(body)", function() {
return expect(parseTemplate('!case test: \n@block(body)')).toBe('"case ",t.transform(e.test),": \\n",t.block(t.transform(e.body))');
});
});
})();// wrap line by gulp-twoside