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'