peasy
Version:
an easy but powerful parser
63 lines (61 loc) • 4.62 kB
text/coffeescript
peasy = require '../peasy'
#console.log 'peasy is required:', peasy
#peasy.testing = true
{parseTemplate} = require '../samples/dsl'
describe "run samples/testdsl:", ->
it '', ->
describe "parse template", ->
it "parse @) shold throw error", ->
expect(-> parseTemplate('@)')).toThrow()
it "parse @x()) shold throw error", ->
expect(-> parseTemplate('())')).toThrow()
it "should parse 'x'", ->
expect(parseTemplate('x')).toBe 't.transform(e.x)'
it "should parse 'x!y'", ->
expect(parseTemplate('x!y')).toBe 't.transform(e.x),t.transform(e.y)'
it "should parse '@if_(x!y)'", ->
expect(parseTemplate('(x!y)')).toBe 't.if_(t.transform(e.x),t.transform(e.y))'
it "should parse '@if_(x!!!y)'", ->
expect(parseTemplate('(x!!!y)')).toBe 't.if_(t.transform(e.x),"!",t.transform(e.y))'
it "should parse '@x", ->
expect(parseTemplate('')).toBe 't.x'
it "should parse '@x@y", ->
expect(parseTemplate('')).toBe 't.x,t.y'
it "should parsen !)", ->
expect(parseTemplate('!)')).toBe '")"'
it "should parsen ;23445", ->
expect(parseTemplate(';23445')).toBe '";23445"'
it "should parsen ;23445qwe", ->
expect(parseTemplate(';23445qwe')).toBe '";23445",t.transform(e.qwe)'
it "should parsen ;23445!qwe", ->
expect(parseTemplate(';23445!qwe')).toBe '";23445qwe"'
it "should parsen ;23445!!qwe", ->
expect(parseTemplate(';23445!!qwe')).toBe '";23445!",t.transform(e.qwe)'
it "should parsen @whileLoop(!while @paren(item)\n@block(body))", ->
expect(parseTemplate('(!while (item)\n(body))')).toBe "t.whileLoop(\"while \",t.paren(t.transform(e.item)),\"\\n\",t.block(t.transform(e.body)))"
it 'should parse "value"', ->
expect(parseTemplate('"value"')).toBe '\'"\',t.transform(e.value),\'"\''
it "should parse @array(items)", ->
expect(parseTemplate('(items)')).toBe 't.array(t.transform(e.items))'
it "should parse @if_(!if @paren(test)\n@block(then_)@may(\n!else @block(else_)))", ->
expect(parseTemplate('(!if (test)\n(then_)(\n!else (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))'", ->
expect(parseTemplate('(!for (item !in range)\n(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))", ->
expect(parseTemplate('(!while (item)\n(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)))", ->
expect(parseTemplate('(!try (test)\ncatcher(\n!finally (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)", ->
expect(parseTemplate('!catch (variable(!if test))(\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", ->
expect(parseTemplate('!throw value')).toBe '"throw ",t.transform(e.value)'
it "should parsen caller@paren(@list(args))", ->
expect(parseTemplate('caller((args))')).toBe 't.transform(e.caller),t.paren(t.list(t.transform(e.args)))'
it "should parsen !var @list(vars)", ->
expect(parseTemplate('left = right')).toBe 't.transform(e.left)," = ",t.transform(e.right)'
it "left @op(operator) = right", ->
expect(parseTemplate('left (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)))", ->
expect(parseTemplate('(!switch (expression) \n((cases )) (\n!default: (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))))'
it "!case test: \n@block(body)", ->
expect(parseTemplate('!case test: \n(body)')).toBe '"case ",t.transform(e.test),": \\n",t.block(t.transform(e.body))'