oj
Version:
A unified templating language for the people. Thirsty people.
457 lines (405 loc) • 11.5 kB
text/coffeescript
# oj.jQueryPlugins.coffee
# ==============================================================================
path = require 'path'
fs = require 'fs'
oj = require '../oj.js'
describe 'oj.jQueryPlugins', ->
$body = $('body')
$one = null
$many = null
one = 'one'
many = 'many'
added = 'added'
added1 = 'added1'
added2 = 'added2'
added3 = 'added3'
removeWhitespace = (str) ->
str.replace /[\t\s\n]*(<.*>)[\t\s\n]*/gm, '$1'
expectHTML = (htmlResult) ->
htmlResult = removeWhitespace htmlResult
expect($body.html()).to.equal htmlResult
oneAddOne = (pluginName, html) ->
$one[pluginName] ->
oj.div c:added, added1
expectHTML html
oneAddMany = (pluginName, html) ->
$one[pluginName] ->
oj.div c:added, added1
oj.div c:added, added2
expectHTML html
manyAddOne = (pluginName, html) ->
$many[pluginName] ->
oj.div c:added, added1
expectHTML html
manyAddMany = (pluginName, html) ->
$many[pluginName] ->
oj.div c:added, added1
oj.div c:added, added2
expectHTML html
testPlugin = (pluginName, map) ->
it "jquery.#{pluginName} exists", ->
expect($body.oj).to.be.a 'function'
it "jquery.#{pluginName}: select one, add one", ->
oneAddOne pluginName, map.oneOne
it "jquery.#{pluginName}: select one, add many", ->
oneAddMany pluginName, map.oneMany
it "jquery.#{pluginName}: select many, add one", ->
manyAddOne pluginName, map.manyOne
it "jquery.#{pluginName}: select many, add many", ->
manyAddMany pluginName, map.manyMany
beforeEach ->
# Clear html
$body.html removeWhitespace """
<div class="one">
<div class="many">many1</div>
<div class="many">many2</div>
</div>
"""
$one = $('.one')
$many = $('.many')
# jquery.oj
# ---------------------------------------------------------------------------
testPlugin 'oj',
oneOne: """
<div class="one">
<div class="added">added1</div>
</div>
"""
oneMany: """
<div class="one">
<div class="added">added1</div>
<div class="added">added2</div>
</div>
"""
manyOne: """
<div class="one">
<div class="many">
<div class="added">added1</div>
</div>
<div class="many">
<div class="added">added1</div>
</div>
</div>
"""
manyMany: """
<div class="one">
<div class="many">
<div class="added">added1</div>
<div class="added">added2</div>
</div>
<div class="many">
<div class="added">added1</div>
<div class="added">added2</div>
</div>
</div>
"""
it "jquery.ojValue get number", ->
$('body').html """
<div class="test">42</div>
"""
expect($('.test').ojValue()).to.equal 42
it "jquery.ojValue get string", ->
$('body').html """
<div class="test">forty-two</div>
"""
expect($('.test').ojValue()).to.equal 'forty-two'
it "jquery.ojValue get oj instance", ->
cb = null
$('body').oj ->
oj.div c:'test', ->
cb = oj.CheckBox value:true
result = $('.test').ojValue()
expect(oj.isOJ result).to.equal true
expect(result.typeName).to.equal 'CheckBox'
expect(result).to.equal cb
it "jquery.ojValue get one (element)", ->
result = $one.ojValue()
expect(oj.isDOMElement result).to.equal true
expect(result.tagName).to.equal 'DIV'
it "jquery.ojValue get many (strings)", ->
results = $many.ojValue()
expect(results).to.deep.equal 'many1'
it "jquery.ojValues get number", ->
$('body').html """
<div class="test">42</div>
"""
expect($('.test').ojValues()).to.deep.equal [42]
it "jquery.ojValues get string", ->
$('body').html """
<div class="test">forty-two</div>
"""
expect($('.test').ojValues()).to.deep.equal ['forty-two']
it "jquery.ojValues get oj instance", ->
cb = null
$('body').oj ->
oj.div c:'test', ->
cb = oj.CheckBox value:true
result = $('.test').ojValues()
expect(oj.isOJ result[0]).to.equal true
expect(result[0].typeName).to.equal 'CheckBox'
expect(result).to.deep.equal [cb]
it "jquery.ojValues get one (element)", ->
result = $one.ojValues()
expect(oj.isDOMElement result[0]).to.equal true
expect(result[0].tagName).to.equal 'DIV'
it "jquery.ojValues get many (strings)", ->
results = $many.ojValues()
expect(results).to.deep.equal ['many1', 'many2']
# jquery.ojAfter
# ---------------------------------------------------------------------------
testPlugin 'ojAfter',
oneOne: """
<div class="one">
<div class="many">many1</div>
<div class="many">many2</div>
</div>
<div class="added">added1</div>
"""
oneMany: """
<div class="one">
<div class="many">many1</div>
<div class="many">many2</div>
</div>
<div class="added">added1</div>
<div class="added">added2</div>
"""
manyOne: """
<div class="one">
<div class="many">many1</div>
<div class="added">added1</div>
<div class="many">many2</div>
<div class="added">added1</div>
</div>
"""
manyMany: """
<div class="one">
<div class="many">many1</div>
<div class="added">added1</div>
<div class="added">added2</div>
<div class="many">many2</div>
<div class="added">added1</div>
<div class="added">added2</div>
</div>
"""
# jquery.ojBefore
# ---------------------------------------------------------------------------
testPlugin 'ojBefore',
oneOne: """
<div class="added">added1</div>
<div class="one">
<div class="many">many1</div>
<div class="many">many2</div>
</div>
"""
oneMany: """
<div class="added">added1</div>
<div class="added">added2</div>
<div class="one">
<div class="many">many1</div>
<div class="many">many2</div>
</div>
"""
manyOne: """
<div class="one">
<div class="added">added1</div>
<div class="many">many1</div>
<div class="added">added1</div>
<div class="many">many2</div>
</div>
"""
manyMany: """
<div class="one">
<div class="added">added1</div>
<div class="added">added2</div>
<div class="many">many1</div>
<div class="added">added1</div>
<div class="added">added2</div>
<div class="many">many2</div>
</div>
"""
# jquery.ojAppend
# ---------------------------------------------------------------------------
testPlugin 'ojAppend',
oneOne: """
<div class="one">
<div class="many">many1</div>
<div class="many">many2</div>
<div class="added">added1</div>
</div>
"""
oneMany: """
<div class="one">
<div class="many">many1</div>
<div class="many">many2</div>
<div class="added">added1</div>
<div class="added">added2</div>
</div>
"""
manyOne: """
<div class="one">
<div class="many">many1
<div class="added">added1</div>
</div>
<div class="many">many2
<div class="added">added1</div>
</div>
</div>
"""
manyMany: """
<div class="one">
<div class="many">many1
<div class="added">added1</div>
<div class="added">added2</div>
</div>
<div class="many">many2
<div class="added">added1</div>
<div class="added">added2</div>
</div>
</div>
"""
# jquery.ojPrepend
# ---------------------------------------------------------------------------
testPlugin 'ojPrepend',
oneOne: """
<div class="one">
<div class="added">added1</div>
<div class="many">many1</div>
<div class="many">many2</div>
</div>
"""
oneMany: """
<div class="one">
<div class="added">added1</div>
<div class="added">added2</div>
<div class="many">many1</div>
<div class="many">many2</div>
</div>
"""
manyOne: """
<div class="one">
<div class="many">
<div class="added">added1</div>
many1
</div>
<div class="many">
<div class="added">added1</div>
many2
</div>
</div>
"""
manyMany: """
<div class="one">
<div class="many">
<div class="added">added1</div>
<div class="added">added2</div>
many1
</div>
<div class="many">
<div class="added">added1</div>
<div class="added">added2</div>
many2
</div>
</div>
"""
# jquery.ojReplaceWith
# ---------------------------------------------------------------------------
testPlugin 'ojReplaceWith',
oneOne: """
<div class="added">added1</div>
"""
oneMany: """
<div class="added">added1</div>
<div class="added">added2</div>
"""
manyOne: """
<div class="one">
<div class="added">added1</div>
<div class="added">added1</div>
</div>
"""
manyMany: """
<div class="one">
<div class="added">added1</div>
<div class="added">added2</div>
<div class="added">added1</div>
<div class="added">added2</div>
</div>
"""
# jquery.ojWrap
# ---------------------------------------------------------------------------
testPlugin 'ojWrap',
oneOne: """
<div class="added">added1
<div class="one">
<div class="many">many1</div>
<div class="many">many2</div>
</div>
</div>
"""
oneMany: """
<div class="added">added1
<div class="one">
<div class="many">many1</div>
<div class="many">many2</div>
</div>
</div>
"""
manyOne: """
<div class="one">
<div class="added">added1
<div class="many">many1</div>
</div>
<div class="added">added1
<div class="many">many2</div>
</div>
</div>
"""
manyMany: """
<div class="one">
<div class="added">added1
<div class="many">many1</div>
</div>
<div class="added">added1
<div class="many">many2</div>
</div>
</div>
"""
# jquery.ojWrapInner
# ---------------------------------------------------------------------------
testPlugin 'ojWrapInner',
oneOne: """
<div class="one">
<div class="added">added1
<div class="many">many1</div>
<div class="many">many2</div>
</div>
</div>
"""
oneMany: """
<div class="one">
<div class="added">added1
<div class="many">many1</div>
<div class="many">many2</div>
</div>
</div>
"""
manyOne: """
<div class="one">
<div class="many">
<div class="added">added1many1</div>
</div>
<div class="many">
<div class="added">added1many2</div>
</div>
</div>
"""
manyMany: """
<div class="one">
<div class="many">
<div class="added">added1many1</div>
</div>
<div class="many">
<div class="added">added1many2</div>
</div>
</div>
"""