caveman
Version:
A fast JS templating engine.
99 lines (83 loc) • 2.8 kB
text/coffeescript
Caveman = require('../caveman.js')
beforeEach ->
Caveman.options.openTag = '{{';
Caveman.options.closeTag = '}}';
Caveman.options.shrinkWrap = true;
Caveman.options.escapeByDefault = true;
describe 'Interpolation', ->
it 'without interpolation', ->
data = {}
template = 'foo bar foo'
expected = 'foo bar foo'
expect(Caveman(template, data)).toEqual(expected)
it 'only interpolation', ->
data = { a: '123', b: 234 }
template = '{{d.a}}{{d.b}}'
expected = '123234'
expect(Caveman(template, data)).toEqual(expected)
it 'strings', ->
data = { a: '123', b: 'true', empty: '' }
template = '| {{d.a}} | {{d.b}} | {{d.c}} |'
expected = '| 123 | true | |'
expect(Caveman(template, data)).toEqual(expected)
it 'numbers', ->
data = { a: 123, b: 0.0, c: 1.01, d: 1, e: 0 }
template = '| {{d.a}} | {{d.b}} | {{d.c}} | {{d.d}} | {{d.e}}'
expected = '| 123 | 0 | 1.01 | 1 | 0'
expect(Caveman(template, data)).toEqual(expected)
it 'boolean', ->
data = { a: true, b: false }
template = '| {{d.a}} | {{d.b}} |'
expected = '| true | false |'
expect(Caveman(template, data)).toEqual(expected)
it 'null and undefined', ->
data = { a: null, b: undefined }
template = '| {{d.a}} | {{d.b}} | {{d.c}} |'
expected = '| | | |'
expect(Caveman(template, data)).toEqual(expected)
it 'arrays', ->
data = { a: [1, 2, 3], b: [] }
template = '| {{d.a}} | {{d.b}} |'
expected = '| 1,2,3 | |'
expect(Caveman(template, data)).toEqual(expected)
it 'objects', ->
data = { a: 123, b: 234 }
template = '| {{d}} |'
expected = '| [object Object] |'
expect(Caveman(template, data)).toEqual(expected)
it 'dot notation', ->
data = {
foo: {
bar: 123
}
}
template = '{{d.foo.bar}}'
expected = '123'
expect(Caveman(template, data)).toEqual(expected)
it 'dot and bracket notation', ->
data = {
colors: [
{ name: 'red' }
{ name: 'blue' }
{ name: 'orange' }
{ name: 'white' }
]
}
template = 'My favorite color is {{d.colors[1].name}}.'
expected = 'My favorite color is blue.'
expect(Caveman(template, data)).toEqual(expected)
it 'error handling', ->
data = { a: 1, b: 2, c: 3 }
template = '| {{{d.a{{d.b}} | {{}} | }}{{ | \\{\\{hello\\}\\} |'
expected = '| {d.a2 | | | {{hello}} |'
expect(Caveman(template, data)).toEqual(expected)
it 'block comments', ->
data = {}
template = '{{// This is a comment }}'
expected = ''
expect(Caveman(template, data)).toEqual(expected)
it 'inline comments', ->
data = {}
template = 'foo{{// This is a comment }}bar'
expected = 'foobar'
expect(Caveman(template, data)).toEqual(expected)