velocityjs
Advanced tools
Comparing version 0.3.15 to 0.3.16
{ | ||
"name": "velocityjs", | ||
"description": "Velocity Template Language(VTL) for JavaScript", | ||
"version": "0.3.15", | ||
"version": "0.3.16", | ||
"keywords": [ | ||
@@ -6,0 +6,0 @@ "velocity template" |
@@ -29,3 +29,8 @@ module.exports = function(Velocity, utils){ | ||
var text = Velocity.Helper.getRefText(ast) | ||
if (text in context) { | ||
return context[text]; | ||
} | ||
if (ret !== undefined && isfn) { | ||
@@ -32,0 +37,0 @@ ret = this.getPropMethod(ast, context); |
@@ -1,5 +0,5 @@ | ||
var Velocity = require('../src/velocity'); | ||
var assert = require("assert"); | ||
var Parser = Velocity.Parser; | ||
var Compile = Velocity.Compile; | ||
var Velocity = require('../src/velocity') | ||
var assert = require("assert") | ||
var Parser = Velocity.Parser | ||
var Compile = Velocity.Compile | ||
@@ -9,10 +9,10 @@ describe('Compile', function(){ | ||
function render(str, context, macros){ | ||
var compile = new Compile(Parser.parse(str)); | ||
return compile.render(context, macros); | ||
var compile = new Compile(Parser.parse(str)) | ||
return compile.render(context, macros) | ||
} | ||
function getContext(str, context, macros){ | ||
var compile = new Compile(Parser.parse(str)); | ||
compile.render(context, macros); | ||
return compile.context; | ||
var compile = new Compile(Parser.parse(str)) | ||
compile.render(context, macros) | ||
return compile.context | ||
} | ||
@@ -23,85 +23,92 @@ | ||
it('get/is method', function(){ | ||
var vm = '$customer.getAddress()'; | ||
var vm1 = '$customer.get("Address") $customer.isAddress()'; | ||
var vm = '$customer.getAddress()' | ||
var vm1 = '$customer.get("Address") $customer.isAddress()' | ||
assert.equal('bar' , render(vm, {customer: {Address: "bar"}})); | ||
assert.equal('bar bar', render(vm1, {customer: {Address: "bar"}})); | ||
}); | ||
assert.equal('bar' , render(vm, {customer: {Address: "bar"}})) | ||
assert.equal('bar bar', render(vm1, {customer: {Address: "bar"}})) | ||
}) | ||
it('index notation', function(){ | ||
var vm = '$foo[0] $foo[$i] $foo.get(1)'; | ||
assert.equal('bar haha haha', render(vm, {foo: ["bar", "haha"], i: 1})); | ||
}); | ||
var vm = '$foo[0] $foo[$i] $foo.get(1)' | ||
assert.equal('bar haha haha', render(vm, {foo: ["bar", "haha"], i: 1})) | ||
}) | ||
it('set method', function(){ | ||
var vm = '$page.setTitle( "My Home Page" ).setname("haha")$page.Title $page.name'; | ||
assert.equal('My Home Page haha', render(vm)); | ||
}); | ||
var vm = '$page.setTitle( "My Home Page" ).setname("haha")$page.Title $page.name' | ||
assert.equal('My Home Page haha', render(vm)) | ||
}) | ||
it('size method', function(){ | ||
var vm = '$foo.bar.size()'; | ||
assert.equal('2', render(vm, {foo: {bar: [1, 2]}})); | ||
assert.equal('2', render(vm, {foo: {bar: {a: 1, b: 3}}})); | ||
var vm = '$foo.bar.size()' | ||
assert.equal('2', render(vm, {foo: {bar: [1, 2]}})) | ||
assert.equal('2', render(vm, {foo: {bar: {a: 1, b: 3}}})) | ||
var vm2 = '#if($foo.bar.size()) ok #{else} nosize #end'; | ||
assert.equal(' nosize ', render(vm2, {foo: {bar: 123}})); | ||
assert.equal(' nosize ', render(vm2, {foo: {}})); | ||
}); | ||
var vm2 = '#if($foo.bar.size()) ok #{else} nosize #end' | ||
assert.equal(' nosize ', render(vm2, {foo: {bar: 123}})) | ||
assert.equal(' nosize ', render(vm2, {foo: {}})) | ||
}) | ||
it('quiet reference', function(){ | ||
var vm = 'my email is $email'; | ||
var vmquiet = 'my email is $!email'; | ||
assert.equal(vm, render(vm)); | ||
assert.equal('my email is ', render(vmquiet)); | ||
}); | ||
var vm = 'my email is $email' | ||
var vmquiet = 'my email is $!email' | ||
assert.equal(vm, render(vm)) | ||
assert.equal('my email is ', render(vmquiet)) | ||
}) | ||
it('silence all reference', function(){ | ||
var vm = 'my email is $email'; | ||
var vm = 'my email is $email' | ||
var compile = new Compile(Parser.parse(vm)); | ||
assert.equal('my email is ', compile.render(null, null, true)); | ||
}); | ||
var compile = new Compile(Parser.parse(vm)) | ||
assert.equal('my email is ', compile.render(null, null, true)) | ||
}) | ||
it('this context keep correct, see #16', function(){ | ||
var data = 'a = $a.get()'; | ||
Compile.Parser = Parser; | ||
var data = 'a = $a.get()' | ||
Compile.Parser = Parser | ||
function b(c) { | ||
this.c = c; | ||
this.c = c | ||
} | ||
b.prototype.get = function() { | ||
var t = this.eval("; hello $name", {name: 'hanwen'}); | ||
return this.c + t; | ||
}; | ||
var t = this.eval(" hello $name", {name: 'hanwen'}) | ||
return this.c + t | ||
} | ||
assert.equal('a = 1; hello hanwen', render(data, {a: new b(1)})); | ||
}); | ||
assert.equal('a = 1 hello hanwen', render(data, {a: new b(1)})) | ||
}) | ||
}); | ||
it('get variable form text', function(){ | ||
var vm = 'hello $user.getName().getFullName("hanwen")' | ||
var data = { '$user.getName().getFullName("hanwen")': 'world' } | ||
assert.equal('hello world', render(vm, data)) | ||
}) | ||
}) | ||
describe('Set && Expression', function(){ | ||
it('set equal to reference', function(){ | ||
var vm = '#set( $monkey = $bill ) ## variable reference'; | ||
assert.equal("hello", getContext(vm, {bill: 'hello'}).monkey); | ||
}); | ||
var vm = '#set( $monkey = $bill ) ## variable reference' | ||
assert.equal("hello", getContext(vm, {bill: 'hello'}).monkey) | ||
}) | ||
it('empty map', function(){ | ||
var vm = '#set($foo = {})' | ||
assert.deepEqual({}, getContext(vm).foo); | ||
}); | ||
assert.deepEqual({}, getContext(vm).foo) | ||
}) | ||
it('set equal to literal', function(){ | ||
var vm = "#set( $monkey.Friend = 'monica' ) ## string literal\n" + | ||
'#set( $monkey.Number = 123 ) ##number literal'; | ||
assert.equal("monica", getContext(vm).monkey.Friend); | ||
assert.equal("123" , getContext(vm).monkey.Number); | ||
}); | ||
'#set( $monkey.Number = 123 ) ##number literal' | ||
assert.equal("monica", getContext(vm).monkey.Friend) | ||
assert.equal("123" , getContext(vm).monkey.Number) | ||
}) | ||
it('equal to method/property reference', function(){ | ||
var vm = "#set($monkey.Blame = $spindoctor.Leak) ## property \n" + | ||
'#set( $monkey.Plan = $spindoctor.weave($web) ) ## method'; | ||
'#set( $monkey.Plan = $spindoctor.weave($web) ) ## method' | ||
var obj = { | ||
spindoctor: { | ||
weave: function(name){ | ||
return name; | ||
return name | ||
}, | ||
@@ -111,7 +118,7 @@ Leak: "hello world" | ||
web: "name" | ||
}; | ||
} | ||
assert.equal("hello world" , getContext(vm, obj).monkey.Blame); | ||
assert.equal("name" , getContext(vm, obj).monkey.Plan); | ||
}); | ||
assert.equal("hello world" , getContext(vm, obj).monkey.Blame) | ||
assert.equal("name" , getContext(vm, obj).monkey.Plan) | ||
}) | ||
@@ -123,52 +130,52 @@ | ||
'#set( $monkey.Map = {"banana" : "good", "roast beef" : "bad"}) ## Map' | ||
]; | ||
] | ||
var list = ["Not", "my", "fault"]; | ||
var map = {"banana" : "good", "roast beef" : "bad"}; | ||
assert.deepEqual(list , getContext(vms[0], {my: "my"}).monkey.Say); | ||
assert.deepEqual(map , getContext(vms[1]).monkey.Map); | ||
}); | ||
var list = ["Not", "my", "fault"] | ||
var map = {"banana" : "good", "roast beef" : "bad"} | ||
assert.deepEqual(list , getContext(vms[0], {my: "my"}).monkey.Say) | ||
assert.deepEqual(map , getContext(vms[1]).monkey.Map) | ||
}) | ||
it('expression simple math', function(){ | ||
assert.equal(10 , getContext('#set($foo = 2 * 5)').foo); | ||
assert.equal(2 , getContext('#set($foo = 4 / 2)').foo); | ||
assert.equal(-3 , getContext('#set($foo = 2 - 5)').foo); | ||
assert.equal(1 , getContext('#set($foo = 5 % 2)').foo); | ||
assert.equal(7 , getContext('#set($foo = 7)').foo); | ||
}); | ||
assert.equal(10 , getContext('#set($foo = 2 * 5)').foo) | ||
assert.equal(2 , getContext('#set($foo = 4 / 2)').foo) | ||
assert.equal(-3 , getContext('#set($foo = 2 - 5)').foo) | ||
assert.equal(1 , getContext('#set($foo = 5 % 2)').foo) | ||
assert.equal(7 , getContext('#set($foo = 7)').foo) | ||
}) | ||
it('math with decimal', function(){ | ||
assert.equal(10.5 , getContext('#set($foo = 2.1 * 5)').foo); | ||
assert.equal(2.1 , getContext('#set($foo = 4.2 / 2)').foo); | ||
assert.equal(-7.5 , getContext('#set($foo = - 2.5 - 5)').foo); | ||
}); | ||
assert.equal(10.5 , getContext('#set($foo = 2.1 * 5)').foo) | ||
assert.equal(2.1 , getContext('#set($foo = 4.2 / 2)').foo) | ||
assert.equal(-7.5 , getContext('#set($foo = - 2.5 - 5)').foo) | ||
}) | ||
it('expression complex math', function(){ | ||
assert.equal(20 , getContext('#set($foo = (7 + 3) * (10 - 8))').foo); | ||
assert.equal(-20 , getContext('#set($foo = -(7 + 3) * (10 - 8))').foo); | ||
assert.equal(-1 , getContext('#set($foo = -7 + 3 * (10 - 8))').foo); | ||
}); | ||
assert.equal(20 , getContext('#set($foo = (7 + 3) * (10 - 8))').foo) | ||
assert.equal(-20 , getContext('#set($foo = -(7 + 3) * (10 - 8))').foo) | ||
assert.equal(-1 , getContext('#set($foo = -7 + 3 * (10 - 8))').foo) | ||
}) | ||
it('expression compare', function(){ | ||
assert.equal(false , getContext('#set($foo = 10 > 11)').foo); | ||
assert.equal(true , getContext('#set($foo = 10 < 11)').foo); | ||
assert.equal(true , getContext('#set($foo = 10 != 11)').foo); | ||
assert.equal(true , getContext('#set($foo = 10 <= 11)').foo); | ||
assert.equal(true , getContext('#set($foo = 11 <= 11)').foo); | ||
assert.equal(false , getContext('#set($foo = 12 <= 11)').foo); | ||
assert.equal(true , getContext('#set($foo = 12 >= 11)').foo); | ||
assert.equal(false , getContext('#set($foo = 10 == 11)').foo); | ||
}); | ||
assert.equal(false , getContext('#set($foo = 10 > 11)').foo) | ||
assert.equal(true , getContext('#set($foo = 10 < 11)').foo) | ||
assert.equal(true , getContext('#set($foo = 10 != 11)').foo) | ||
assert.equal(true , getContext('#set($foo = 10 <= 11)').foo) | ||
assert.equal(true , getContext('#set($foo = 11 <= 11)').foo) | ||
assert.equal(false , getContext('#set($foo = 12 <= 11)').foo) | ||
assert.equal(true , getContext('#set($foo = 12 >= 11)').foo) | ||
assert.equal(false , getContext('#set($foo = 10 == 11)').foo) | ||
}) | ||
it('expression logic', function(){ | ||
assert.equal(false , getContext('#set($foo = 10 == 11 && 3 > 1)').foo); | ||
assert.equal(true , getContext('#set($foo = 10 < 11 && 3 > 1)').foo); | ||
assert.equal(true , getContext('#set($foo = 10 > 11 || 3 > 1)').foo); | ||
assert.equal(true , getContext('#set($foo = !(10 > 11) && 3 > 1)').foo); | ||
assert.equal(false , getContext('#set($foo = $a > $b)', {a: 1, b: 2}).foo); | ||
assert.equal(false , getContext('#set($foo = $a && $b)', {a: 1, b: 0}).foo); | ||
assert.equal(true , getContext('#set($foo = $a || $b)', {a: 1, b: 0}).foo); | ||
}); | ||
assert.equal(false , getContext('#set($foo = 10 == 11 && 3 > 1)').foo) | ||
assert.equal(true , getContext('#set($foo = 10 < 11 && 3 > 1)').foo) | ||
assert.equal(true , getContext('#set($foo = 10 > 11 || 3 > 1)').foo) | ||
assert.equal(true , getContext('#set($foo = !(10 > 11) && 3 > 1)').foo) | ||
assert.equal(false , getContext('#set($foo = $a > $b)', {a: 1, b: 2}).foo) | ||
assert.equal(false , getContext('#set($foo = $a && $b)', {a: 1, b: 0}).foo) | ||
assert.equal(true , getContext('#set($foo = $a || $b)', {a: 1, b: 0}).foo) | ||
}) | ||
}); | ||
}) | ||
@@ -181,26 +188,26 @@ describe('Literals', function(){ | ||
'#set( $template = "$directoryRoot/$templateName" )' + | ||
'$template'; | ||
'$template' | ||
assert.equal('www/index.vm', render(vm)); | ||
}); | ||
assert.equal('www/index.vm', render(vm)) | ||
}) | ||
it('not eval string', function(){ | ||
var vm = "#set( $blargh = '$foo' )$blargh"; | ||
assert.equal('$foo', render(vm)); | ||
}); | ||
var vm = "#set( $blargh = '$foo' )$blargh" | ||
assert.equal('$foo', render(vm)) | ||
}) | ||
it('not parse #[[ ]]#', function(){ | ||
var vm = '#foreach ($woogie in $boogie) nothing to $woogie #end'; | ||
assert.equal(vm, render('#[[' + vm + ']]#')); | ||
}); | ||
var vm = '#foreach ($woogie in $boogie) nothing to $woogie #end' | ||
assert.equal(vm, render('#[[' + vm + ']]#')) | ||
}) | ||
it('Range Operator', function(){ | ||
var vm1 = '#set($foo = [-1..2])'; | ||
var vm2 = '#set($foo = [-1..$bar])'; | ||
var vm3 = '#set($foo = [$bar..2])'; | ||
assert.deepEqual([-1, 0, 1, 2], getContext(vm1).foo); | ||
assert.deepEqual([-1, 0, 1, 2], getContext(vm2, {bar: 2}).foo); | ||
assert.deepEqual([-1, 0, 1, 2], getContext(vm3, {bar: -1}).foo); | ||
assert.deepEqual([], getContext('#set($foo = [$bar..1])').foo); | ||
}); | ||
var vm1 = '#set($foo = [-1..2])' | ||
var vm2 = '#set($foo = [-1..$bar])' | ||
var vm3 = '#set($foo = [$bar..2])' | ||
assert.deepEqual([-1, 0, 1, 2], getContext(vm1).foo) | ||
assert.deepEqual([-1, 0, 1, 2], getContext(vm2, {bar: 2}).foo) | ||
assert.deepEqual([-1, 0, 1, 2], getContext(vm3, {bar: -1}).foo) | ||
assert.deepEqual([], getContext('#set($foo = [$bar..1])').foo) | ||
}) | ||
@@ -213,3 +220,3 @@ it('map and array nest', function(){ | ||
'])\n' + | ||
' '; | ||
' ' | ||
@@ -222,8 +229,8 @@ var vm2 = '' + | ||
'})\n' + | ||
'' ; | ||
'' | ||
assert.deepEqual([{name: 1}, { name: 2 }], getContext(vm1).a); | ||
assert.deepEqual({a: [1, 2, ["1", "a"], {a: 1}], b: "12", c: false}, getContext(vm2).a); | ||
}); | ||
}); | ||
assert.deepEqual([{name: 1}, { name: 2 }], getContext(vm1).a) | ||
assert.deepEqual({a: [1, 2, ["1", "a"], {a: 1}], b: "12", c: false}, getContext(vm2).a) | ||
}) | ||
}) | ||
@@ -233,25 +240,25 @@ describe('Conditionals', function(){ | ||
it('#if', function(){ | ||
var vm = '#if($foo)Velocity#end'; | ||
assert.equal('Velocity', render(vm, {foo: 1})); | ||
}); | ||
var vm = '#if($foo)Velocity#end' | ||
assert.equal('Velocity', render(vm, {foo: 1})) | ||
}) | ||
it('#elseif & #else', function(){ | ||
var vm = '#if($foo < 5)Go North#elseif($foo == 8)Go East#{else}Go South#end'; | ||
assert.equal('Go North' , render(vm, {foo: 4})); | ||
assert.equal('Go East' , render(vm, {foo: 8})); | ||
assert.equal('Go South' , render(vm, {foo: 9})); | ||
}); | ||
var vm = '#if($foo < 5)Go North#elseif($foo == 8)Go East#{else}Go South#end' | ||
assert.equal('Go North' , render(vm, {foo: 4})) | ||
assert.equal('Go East' , render(vm, {foo: 8})) | ||
assert.equal('Go South' , render(vm, {foo: 9})) | ||
}) | ||
it('#if with arguments', function(){ | ||
var vm = '#if($foo.isTrue(true))true#end'; | ||
var vm = '#if($foo.isTrue(true))true#end' | ||
var foo = { | ||
isTrue: function(str) { | ||
return !!str; | ||
return !!str | ||
} | ||
} | ||
assert.equal('true', render(vm, {foo: foo})); | ||
}); | ||
assert.equal('true', render(vm, {foo: foo})) | ||
}) | ||
}); | ||
}) | ||
@@ -261,23 +268,23 @@ describe('Loops', function(){ | ||
it('#foreach', function(){ | ||
var vm = '#foreach( $product in $allProducts )<li>$product</li>#end'; | ||
var data = {allProducts: ["book", "phone"]}; | ||
assert.equal('<li>book</li><li>phone</li>', render(vm, data)); | ||
}); | ||
var vm = '#foreach( $product in $allProducts )<li>$product</li>#end' | ||
var data = {allProducts: ["book", "phone"]} | ||
assert.equal('<li>book</li><li>phone</li>', render(vm, data)) | ||
}) | ||
it('#foreach with map', function(){ | ||
var vm = '#foreach($key in $products) name => $products.name #end'; | ||
var data = {products: {name: "hanwen"}}; | ||
assert.equal(' name => hanwen ', render(vm, data)); | ||
}); | ||
var vm = '#foreach($key in $products) name => $products.name #end' | ||
var data = {products: {name: "hanwen"}} | ||
assert.equal(' name => hanwen ', render(vm, data)) | ||
}) | ||
it('#foreach with map keySet', function(){ | ||
var vm = '#foreach($key in $products.keySet()) $key => $products.get($key) #end'; | ||
var data = {products: {name: "hanwen"}}; | ||
assert.equal(' name => hanwen ', render(vm, data)); | ||
}); | ||
var vm = '#foreach($key in $products.keySet()) $key => $products.get($key) #end' | ||
var data = {products: {name: "hanwen"}} | ||
assert.equal(' name => hanwen ', render(vm, data)) | ||
}) | ||
it('#foreach with nest foreach', function(){ | ||
var vm = '#foreach($i in [1..2])${velocityCount}#foreach($j in [2..3])${velocityCount}#end#end'; | ||
assert.equal('112212', render(vm)); | ||
}); | ||
var vm = '#foreach($i in [1..2])${velocityCount}#foreach($j in [2..3])${velocityCount}#end#end' | ||
assert.equal('112212', render(vm)) | ||
}) | ||
@@ -295,3 +302,3 @@ it('#foreach with map entrySet', function(){ | ||
'$_item.key = $staticServer.getURI("/${_item.value}")\n'+ | ||
'#end'; | ||
'#end' | ||
@@ -302,3 +309,3 @@ var ret = 'js_arale = /path/build/js/arale.js?t=20110608\n' + | ||
'js_swiff = /path/build/js/app/swiff.js?t=20110608\n' + | ||
'js_alieditControl = /path/build/js/pa/alieditcontrol-update.js?t=20110608\n'; | ||
'js_alieditControl = /path/build/js/pa/alieditcontrol-update.js?t=20110608\n' | ||
@@ -308,17 +315,17 @@ var data = { | ||
getURI: function(url){ | ||
return '/path' + url; | ||
return '/path' + url | ||
} | ||
} | ||
}; | ||
} | ||
assert.equal(ret, render(vm, data)); | ||
assert.equal(ret, render(vm, data)) | ||
}); | ||
}) | ||
it('#break', function(){ | ||
var vm = '#foreach($num in [1..6]) #if($foreach.count > 3) #break #end $num #end'; | ||
assert.equal(' 1 2 3 4 ', render(vm)); | ||
}); | ||
var vm = '#foreach($num in [1..6]) #if($foreach.count > 3) #break #end $num #end' | ||
assert.equal(' 1 2 3 4 ', render(vm)) | ||
}) | ||
}); | ||
}) | ||
@@ -328,42 +335,42 @@ describe('Velocimacros', function(){ | ||
it('simple #macro', function(){ | ||
var vm = '#macro( d )<tr><td></td></tr>#end #d()'; | ||
assert.equal(' <tr><td></td></tr>', render(vm)); | ||
}); | ||
var vm = '#macro( d )<tr><td></td></tr>#end #d()' | ||
assert.equal(' <tr><td></td></tr>', render(vm)) | ||
}) | ||
it('compex #macro', function(){ | ||
var vm = '#macro( d $name)<tr><td>$!name</td></tr>#end #d($foo)'; | ||
var vm1 = '#macro( d $a $b)#if($b)$a#end#end #d ( $foo $bar )'; | ||
var vm = '#macro( d $name)<tr><td>$!name</td></tr>#end #d($foo)' | ||
var vm1 = '#macro( d $a $b)#if($b)$a#end#end #d ( $foo $bar )' | ||
assert.equal(' <tr><td>hanwen</td></tr>', render(vm, {foo: 'hanwen'})); | ||
assert.equal(' <tr><td></td></tr>' , render(vm)); | ||
assert.equal(' ' , render(vm1, {foo: "haha"})); | ||
assert.equal(' ' , render(vm1, {foo: "haha", bar: false})); | ||
assert.equal(' haha' , render(vm1, {foo: "haha", bar: true})); | ||
}); | ||
assert.equal(' <tr><td>hanwen</td></tr>', render(vm, {foo: 'hanwen'})) | ||
assert.equal(' <tr><td></td></tr>' , render(vm)) | ||
assert.equal(' ' , render(vm1, {foo: "haha"})) | ||
assert.equal(' ' , render(vm1, {foo: "haha", bar: false})) | ||
assert.equal(' haha' , render(vm1, {foo: "haha", bar: true})) | ||
}) | ||
it('#macro call arguments', function(){ | ||
var vm = '#macro( d $a $b $d)$a$b$!d#end #d ( $foo , $bar, $dd )'; | ||
assert.equal(' ab', render(vm, {foo: 'a', bar: 'b'})); | ||
assert.equal(' abd', render(vm, {foo: 'a', bar: 'b', dd: 'd'})); | ||
}); | ||
var vm = '#macro( d $a $b $d)$a$b$!d#end #d ( $foo , $bar, $dd )' | ||
assert.equal(' ab', render(vm, {foo: 'a', bar: 'b'})) | ||
assert.equal(' abd', render(vm, {foo: 'a', bar: 'b', dd: 'd'})) | ||
}) | ||
it('#noescape', function(){ | ||
var vm = '#noescape()$hello#end'; | ||
assert.equal('hello world', render(vm, {hello: 'hello world'})); | ||
}); | ||
var vm = '#noescape()$hello#end' | ||
assert.equal('hello world', render(vm, {hello: 'hello world'})) | ||
}) | ||
}); | ||
}) | ||
describe('Escaping', function(){ | ||
it('escape slash', function(){ | ||
var vm = '#set( $email = "foo" )$email \\$email'; | ||
assert.equal('foo $email', render(vm)); | ||
}); | ||
var vm = '#set( $email = "foo" )$email \\$email' | ||
assert.equal('foo $email', render(vm)) | ||
}) | ||
it('double slash', function(){ | ||
var vm = '#set( $email = "foo" )\\\\$email \\\\\\$email'; | ||
assert.equal("\\foo \\$email", render(vm)); | ||
}); | ||
var vm = '#set( $email = "foo" )\\\\$email \\\\\\$email' | ||
assert.equal("\\foo \\$email", render(vm)) | ||
}) | ||
}); | ||
}) | ||
@@ -373,48 +380,48 @@ describe('Error condiction', function(){ | ||
it('css color render', function(){ | ||
var vm = 'color: #666; height: 39px;'; | ||
assert.equal(vm, render(vm)); | ||
}); | ||
var vm = 'color: #666 height: 39px' | ||
assert.equal(vm, render(vm)) | ||
}) | ||
it('jquery parse', function(){ | ||
var vm = '$(function(){ $("a").click(); $.post(); })'; | ||
assert.equal(vm, render(vm)); | ||
}); | ||
var vm = '$(function(){ $("a").click() $.post() })' | ||
assert.equal(vm, render(vm)) | ||
}) | ||
it('issue #7: $ meet with #', function(){ | ||
var vm = '$bar.foo()#if(1>0)...#end'; | ||
assert.equal('$bar.foo()...', render(vm)); | ||
}); | ||
var vm = '$bar.foo()#if(1>0)...#end' | ||
assert.equal('$bar.foo()...', render(vm)) | ||
}) | ||
it('issue #15', function(){ | ||
var vm = '#macro(a $b $list)#foreach($a in $list)${a}#end $b #end #a("hello", [1, 2])'; | ||
assert.equal(' 12 hello ', render(vm)); | ||
}); | ||
var vm = '#macro(a $b $list)#foreach($a in $list)${a}#end $b #end #a("hello", [1, 2])' | ||
assert.equal(' 12 hello ', render(vm)) | ||
}) | ||
it('issue #18', function(){ | ||
var vm = '$!tradeDetailModel.goodsInfoModel.goodsTitle[<a href="$!personalModule.setTarget(\'/p.htm\').addQueryData("id",$!stringUtil.substringAfter($!tradeDetailModel.goodsInfoModel.goodsId,"guarantee."))" target="_blank">商品页面</a>]'; | ||
var ret = '[<a href="" target="_blank">商品页面</a>]'; | ||
assert.equal(ret, render(vm)); | ||
}); | ||
var vm = '$!tradeDetailModel.goodsInfoModel.goodsTitle[<a href="$!personalModule.setTarget(\'/p.htm\').addQueryData("id",$!stringUtil.substringAfter($!tradeDetailModel.goodsInfoModel.goodsId,"guarantee."))" target="_blank">商品页面</a>]' | ||
var ret = '[<a href="" target="_blank">商品页面</a>]' | ||
assert.equal(ret, render(vm)) | ||
}) | ||
it('issue #18, condiction 2', function(){ | ||
var vm = '$!a(**** **** **** $stringUtil.right($!b,4))'; | ||
var ret = '(**** **** **** $stringUtil.right($!b,4))'; | ||
assert.equal(ret, render(vm)); | ||
}); | ||
var vm = '$!a(**** **** **** $stringUtil.right($!b,4))' | ||
var ret = '(**** **** **** $stringUtil.right($!b,4))' | ||
assert.equal(ret, render(vm)) | ||
}) | ||
it('# meet with css property', function(){ | ||
var vm = '#margin-top:2px;'; | ||
assert.equal(vm, render(vm)); | ||
}); | ||
var vm = '#margin-top:2px' | ||
assert.equal(vm, render(vm)) | ||
}) | ||
it('var end must in condiction var begin', function(){ | ||
var vm = 'stepFareNo:{$!result.getStepFareNo()}'; | ||
assert.equal('stepFareNo:{}', render(vm)); | ||
}); | ||
var vm = 'stepFareNo:{$!result.getStepFareNo()}' | ||
assert.equal('stepFareNo:{}', render(vm)) | ||
}) | ||
it('empty string condiction', function(){ | ||
assert.equal('', render('')); | ||
}); | ||
assert.equal('', render('')) | ||
}) | ||
}); | ||
}) | ||
@@ -426,38 +433,38 @@ describe('self defined macro', function(){ | ||
haha: function(a, b){ | ||
a = a || ''; | ||
b = b || ''; | ||
return a + " hello to " + b; | ||
a = a || '' | ||
b = b || '' | ||
return a + " hello to " + b | ||
} | ||
}; | ||
} | ||
var vm = '#haha($a, $b)'; | ||
assert.equal(' hello to ', render(vm, {}, macros)); | ||
assert.equal('Lily hello to ', render(vm, {a: "Lily"}, macros)); | ||
}); | ||
var vm = '#haha($a, $b)' | ||
assert.equal(' hello to ', render(vm, {}, macros)) | ||
assert.equal('Lily hello to ', render(vm, {a: "Lily"}, macros)) | ||
}) | ||
it('use eval', function(){ | ||
//这一句非常重要,在node端无需处理,web端必须如此声明 | ||
Compile.Parser = Parser; | ||
Compile.Parser = Parser | ||
var macros = { | ||
cmsparse: function(str){ | ||
return this.eval(str); | ||
return this.eval(str) | ||
}, | ||
d: function(){ | ||
return 'I am d!'; | ||
return 'I am d!' | ||
} | ||
}; | ||
} | ||
var vm = '#cmsparse($str)'; | ||
var vm = '#cmsparse($str)' | ||
var o = { | ||
str: 'hello $foo.bar, #d()', | ||
foo: {bar: 'world'} | ||
}; | ||
} | ||
assert.equal('hello world, I am d!', render(vm, o, macros)); | ||
}); | ||
assert.equal('hello world, I am d!', render(vm, o, macros)) | ||
}) | ||
it('use eval with local variable', function(){ | ||
//这一句非常重要,在node端无需处理,web端必须如此声明 | ||
Compile.Parser = Parser; | ||
Compile.Parser = Parser | ||
@@ -467,31 +474,31 @@ var macros = { | ||
cmsparse: function(str){ | ||
return macros.include.apply(this, arguments); | ||
return macros.include.apply(this, arguments) | ||
}, | ||
include: function(str){ | ||
return this.eval(str, {name: "hanwen"}); | ||
return this.eval(str, {name: "hanwen"}) | ||
}, | ||
parse: function(file){ | ||
return file; | ||
return file | ||
}, | ||
d: function($name){ | ||
return this.eval('I am $name!'); | ||
return this.eval('I am $name!') | ||
} | ||
}; | ||
} | ||
var vm = '#cmsparse($str)'; | ||
var vm1 = '#parse("a.vm")'; | ||
var vm = '#cmsparse($str)' | ||
var vm1 = '#parse("a.vm")' | ||
var o = { | ||
str: 'hello $foo.bar, #d()', | ||
foo: {bar: 'world'} | ||
}; | ||
} | ||
assert.equal('hello world, I am hanwen!', render(vm, o, macros)); | ||
assert.equal(undefined, getContext(vm, o, macros).name); | ||
assert.equal('a.vm', render(vm1, o, macros)); | ||
}); | ||
assert.equal('hello world, I am hanwen!', render(vm, o, macros)) | ||
assert.equal(undefined, getContext(vm, o, macros).name) | ||
assert.equal('a.vm', render(vm1, o, macros)) | ||
}) | ||
}); | ||
}) | ||
@@ -506,11 +513,11 @@ describe('self defined function', function() { | ||
var $sys = this.$sys; | ||
var $sys = this.$sys | ||
if ($sys.others.length) { | ||
this.__temp = {}; | ||
this.__temp = {} | ||
var ast = $sys.total; | ||
ast.path = $sys.others; | ||
$sys.vm.getReferences(ast); | ||
var ast = $sys.total | ||
ast.path = $sys.others | ||
$sys.vm.getReferences(ast) | ||
@@ -522,3 +529,3 @@ } | ||
$stop: true | ||
}; | ||
} | ||
@@ -528,17 +535,17 @@ }, | ||
setParameter: function(key, value){ | ||
this.__temp[key] = value; | ||
return this; | ||
this.__temp[key] = value | ||
return this | ||
} | ||
}; | ||
} | ||
var str = 'hello $who, welcome to $where'; | ||
var str = 'hello $who, welcome to $where' | ||
var vm = '$control.setTemplate($str).setParameter("who", "Blob").setParameter("where", "China")'; | ||
assert.equal(render(vm, {str: str, control: control}), 'hello Blob, welcome to China'); | ||
var vm = '$control.setTemplate($str).setParameter("who", "Blob").setParameter("where", "China")' | ||
assert.equal(render(vm, {str: str, control: control}), 'hello Blob, welcome to China') | ||
}); | ||
}) | ||
}); | ||
}) | ||
}); | ||
}) |
421422
3792