caveman
Version:
A fast JS templating engine.
64 lines (57 loc) • 2.13 kB
text/coffeescript
Caveman = require('../caveman.js')
beforeEach ->
Caveman.options.openTag = '{{';
Caveman.options.closeTag = '}}';
Caveman.options.shrinkWrap = true;
describe 'Partials', ->
it 'should be able to save a partial', ->
expect(Caveman.partials.emailLink).toBe undefined
template = '<a href="mailto:{{d.email}}" class="{{d.className}}">{{d.email}}</a>'
Caveman.register('emailLink', template)
expect(Caveman.partials.emailLink).not.toBe undefined
it 'should be able to render a partial', ->
data = {
users: [
{ email: 'jimmy@gmail.com' }
{ email: 'ralph@gmail.com', className: 'active' }
{ email: 'joe@gmail.com' }
]
}
template = """
{{- for d.users }}
<div class="user">{{- render emailLink }}</div>
{{- end }}
"""
expected = '<div class="user">' +
'<a href="mailto:jimmy@gmail.com" class="">jimmy@gmail.com</a>' +
'</div>' +
'<div class="user">' +
'<a href="mailto:ralph@gmail.com" class="active">ralph@gmail.com</a>' +
'</div>' +
'<div class="user">' +
'<a href="mailto:joe@gmail.com" class="">joe@gmail.com</a>' +
'</div>'
expect(Caveman(template, data)).toEqual(expected)
it 'should be able to render a partial with an optional scope', ->
data = {
users: [
{ email: 'jimmy@gmail.com' }
{ email: 'ralph@gmail.com', className: 'active' }
{ email: 'joe@gmail.com' }
]
}
template = """
<div class="user">{{- render emailLink d.users[1] }}</div>
"""
expected = '<div class="user">' +
'<a href="mailto:ralph@gmail.com" class="active">ralph@gmail.com</a>' +
'</div>'
expect(Caveman(template, data)).toEqual(expected)
it 'should be able to render a partial with an object literal as scope', ->
template = """
<div class="user">{{- render emailLink { email: 'example@gmail.com' } }}</div>
"""
expected = '<div class="user">' +
'<a href="mailto:example@gmail.com" class="">example@gmail.com</a>' +
'</div>'
expect(Caveman(template, {})).toEqual(expected)