Builder = require 'template/builder' Template = require 'template' describe "Builder", -> builder = null beforeEach -> builder = new Builder 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 "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 ".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'