extjs-gpl
Version:
GPL licensed version of Sencha Ext JS
196 lines (166 loc) • 5.97 kB
JavaScript
describe('Ext.util.ObjectTemplate', function () {
var tpl, output,
context = Ext.Object.chain({
direct: false,
object: {
property: 456
}
});
context.text = 'Don';
var fn1 = function() {},
fn2 = function() {},
fn3 = function() {},
fn4 = function() {},
fn5 = function() {};
beforeEach(function () {
tpl = new Ext.util.ObjectTemplate({
foo: 42,
rootFn: fn1,
bar: 'Hello {text}',
baz: '{direct}',
array: [
427,
'Hey {text} {object.property}',
'{object.property}',
'{direct}',
fn2,
null,
0,
false
],
object: {
prop: 3,
objFn: fn3,
tpl: 'Yo {text}',
value: '{direct}',
items: [
77,
'{direct}',
{
v: '{direct}',
x: 1,
s: '-- {text}',
innerFn: fn4
},
'Oy {text}',
fn5
],
aNull: null,
aZero: 0,
aBool: false
},
aNull: null,
aZero: 0,
aBool: false
});
output = tpl.apply(context);
});
describe('the root', function () {
it('should pass through numbers', function () {
expect(output.foo).toBe(42);
});
it('should apply Ext.Template', function () {
expect(output.bar).toBe('Hello Don');
});
it('should map values', function () {
expect(output.baz).toBe(false);
});
it('should pass through functions', function() {
expect(output.rootFn).toBe(fn1);
});
it('should pass through null', function() {
expect(output.aNull).toBeNull();
});
it('should pass through 0', function() {
expect(output.aZero).toBe(0);
});
it('should pass through false', function() {
expect(output.aBool).toBe(false);
});
});
describe('array on the root', function () {
it('should have the correct length', function () {
expect(output.array.length).toBe(8);
});
it('should pass through numbers', function () {
expect(output.array[0]).toBe(427);
});
it('should apply templates', function () {
expect(output.array[1]).toBe('Hey Don 456');
});
it('should pull single values through dotted template expansions', function () {
expect(output.array[2]).toBe(456);
});
it('should pull primitives through simple name expansions', function () {
expect(output.array[3]).toBe(false);
});
it('should pass through functions', function() {
expect(output.array[4]).toBe(fn2);
});
it('should pass through null', function() {
expect(output.array[5]).toBeNull();
});
it('should pass through 0', function() {
expect(output.array[6]).toBe(0);
});
it('should pass through false', function() {
expect(output.array[7]).toBe(false);
});
});
describe('object off the root', function () {
describe('properties', function () {
it('should pass through numbers', function () {
expect(output.object.prop).toBe(3);
});
it('should apply XTemplate', function () {
expect(output.object.tpl).toBe('Yo Don');
});
it('should map values', function () {
expect(output.object.value).toBe(false);
});
it('should pass through functions', function () {
expect(output.object.objFn).toBe(fn3);
});
it('should pass through null', function() {
expect(output.object.aNull).toBeNull();
});
it('should pass through 0', function() {
expect(output.object.aZero).toBe(0);
});
it('should pass through false', function() {
expect(output.object.aBool).toBe(false);
});
});
describe('an array property', function () {
it('should have the correct length', function () {
expect(output.object.items.length).toBe(5);
});
it('should pass through numbers', function () {
expect(output.object.items[0]).toBe(77);
});
it('should pull primitives through simple name expansions', function () {
expect(output.object.items[1]).toBe(false);
});
it('should apply XTemplate', function () {
expect(output.object.items[3]).toBe('Oy Don');
});
it('should pass through functions', function () {
expect(output.object.items[4]).toBe(fn5);
});
});
describe('an object element of an array property', function () {
it('should pull primitives through simple name expansions', function () {
expect(output.object.items[2].v).toBe(false);
});
it('should pass through numbers', function () {
expect(output.object.items[2].x).toBe(1);
});
it('should apply XTemplate', function () {
expect(output.object.items[2].s).toBe('-- Don');
});
it('should pass through functions', function () {
expect(output.object.items[2].innerFn).toBe(fn4);
});
});
});
});