Builder = require 'template/builder'
Template = require 'template'
describe "Builder", ->
builder = null
beforeEach -> builder = new Builder
describe "tag class methods", ->
it "calls render, assuming the arguments to the current method as the first tag", ->
fragment =
Builder.div ->
@ol class: 'cool-list', =>
@li()
@li()
expect(fragment).toMatchSelector('div')
expect(fragment.find('ol.cool-list')).toExist()
expect(fragment.find('li').length).toBe 2
describe "@render", ->
it "runs the given function in a fresh builder instance and returns the resulting view fragment", ->
fragment =
Builder.render ->
@div =>
@ol class: 'cool-list', =>
@li()
@li()
expect(fragment).toMatchSelector('div')
expect(fragment.find('ol.cool-list')).toExist()
expect(fragment.find('li').length).toBe 2
describe ".tag(name, args...)", ->
it "can generate simple tags", ->
builder.tag 'div'
expect(builder.toHtml()).toBe "
"
builder.reset()
builder.tag 'ol'
expect(builder.toHtml()).toBe "
"
it "can generate tags with content", ->
builder.tag 'ol', ->
builder.tag 'li'
builder.tag 'li'
expect(builder.toHtml()).toBe "
"
it "can generate tags with text", ->
builder.tag 'div', "hello"
expect(builder.toHtml()).toBe "hello
"
builder.reset()
builder.tag 'div', 22
expect(builder.toHtml()).toBe "22
"
it "HTML escapes tag text", ->
builder.tag('div', "
")
expect(builder.toHtml()).toBe "<br/>
"
it "can generate tags with attributes", ->
builder.tag 'div', id: 'foo', class: 'bar'
fragment = builder.toFragment()
expect(fragment.attr('id')).toBe 'foo'
expect(fragment.attr('class')).toBe 'bar'
it "can generate self-closing tags", ->
builder.tag 'br', id: 'foo'
expect(builder.toHtml()).toBe '
'
describe ".raw(text)", ->
it "does not escape html entities", ->
builder.raw ' '
expect(builder.toHtml()).toBe ' '
describe ".subview(name, template, attrs)", ->
template = null
beforeEach ->
template = class extends Template
content: (params) ->
@div =>
@h2 params.title
@div "I am a subview"
viewProperties:
foo: "bar"
it "inserts a view built from the given template with the given params", ->
builder.tag 'div', ->
builder.tag 'h1', "Superview"
builder.subview 'sub', template.build(title: "Subview")
fragment = builder.toFragment()
expect(fragment.find("h1:contains(Superview)")).toExist()
expect(fragment.find("h2:contains(Subview)")).toExist()
subview = fragment.sub
expect(subview).toMatchSelector ':has(h2):contains(I am a subview)'
expect(subview.foo).toBe 'bar'