chai = require 'chai'
assert = chai.assert
expect = chai.expect
should = chai.should()
util = require 'util'
tumble = require('../lib/tumble').parse;
test_data = [
{
'input': '',
'output': '',
'description': "no input"
}
{
'input': '',
'output': '',
'description': "just text"
}
{
'input': '
{name}
'
'output': 'Elf Sternberg
'
'data': {'name': 'Elf Sternberg'},
'description': "a simple substitution"
}
{
'input': '{title} {name}
'
'output': 'Mr. Elf Sternberg
'
'data': {'name': 'Elf Sternberg', 'title': 'Mr.'},
'description': "two simple substitutions"
}
{
'input': '{if:title}{title}BBB{/if:title}
'
'output': ''
'data': {'title': 'AAA'}
'description': "a conditional block"
}
{
'input': '{if:title}{title}BBB{/if:title}
'
'output': ''
'data': {'title': ''}
'description': "a conditional block with no input"
}
{
'input': '{block:stories}{title}{/block:stories}
'
'output': ''
'data': {'stories': {'title': ''}}
'description': "a descendent block"
}
{
'input': '{block:stories}{title}BBB{/block:stories}
'
'output': ''
'data': {'stories': {'title': 'AAA'}}
'description': "a descendent block 2"
}
{
'input': '{many:stories}{title}{/many:stories}
'
'output': ''
'data': {'stories': [{'title': ''}]}
'description': "an iterative block"
}
{
'input': '{many:stories}{title}BBB{/many:stories}
'
'output': ''
'data': {'stories': [{'title': 'AAA'}, {'title': 'CCC'}]},
'description': "an iterative block 2"
}
{
'input': '{author}{many:stories}{title}BBB{author}{/many:stories}
'
'output': ''
'data': {'author': 'DDD', 'stories': [{'title': 'AAA'}, {'title': 'CCC'}]},
'description': "an iterative block with ascent"
}
{
'input': "{template:a}{name}{/template:a}F{render:a}"
'output': "FG"
'data': {'name': 'G'}
'description': "A templatized block"
}
]
describe "Basic Functionality", ->
for data in test_data
do (data) ->
it "should work with #{data.description}", ->
r = tumble(data.input)
r = r(data.data)
r.should.equal data.output
describe "Check for recursion", ->
data = {
'input': '{block:a}{block:a}{block:a}{block:a}{block:a}{block:a}{block:a}{block:a}{block:a}{block:a}{block:a}{a}{/block:a}{/block:a}{/block:a}{/block:a}{/block:a}{/block:a}{/block:a}{/block:a}{/block:a}{/block:a}{/block:a}',
'output': '',
'data': {'a': {'a': {'a': {'a': {'a': {'a': {'a': {'a': {'a': {'a': {'a': {'a': 'b'}}}}}}}}}}}},
'description': "descent error"
}
do (data) ->
it "should catch an exception", ->
try
r = tumble(data.input)(data.data)
assert.ok false, "It did not throw the exception"
catch err
assert.ok true, "Recursion depth exeception thrown."