avalon2
Version:
an elegant efficient express mvvm framework
306 lines (265 loc) • 11.2 kB
JavaScript
import { avalon } from '../../src/filters/index'
describe('filters', function () {
describe('uppercase', function () {
var fn = avalon.filters.uppercase
it('test', function () {
expect(fn('aaa')).toBe('AAA')
})
})
describe('lowercase', function () {
var fn = avalon.filters.lowercase
it('test', function () {
expect(fn('AAA')).toBe('aaa')
})
})
describe('escape', function () {
var fn = avalon.filters.escape
it('escapes "&" to "&"', function () {
expect(fn('&')).toBe('&');
});
it('escapes null to 0', function () {
expect(fn(null)).toBe('');
});
it('escapes "<" to "<"', function () {
expect(fn('<')).toBe('<');
});
it('escapes ">" to ">"', function () {
expect(fn('>')).toBe('>');
});
it('escapes \'"\' to """', function () {
expect(fn('"')).toBe('"');
});
it('escapes "\'" to "'"', function () {
expect(fn("'")).toBe(''');
});
it('escapes all special chars', function () {
expect(fn("<&<&")).toBe('<&<&');
});
it('returns an empty string for null', function () {
expect(fn(null)).toBe('');
});
it('returns an empty string for undefined', function () {
expect(fn(null)).toBe('');
});
it('stringify non-string value', function () {
expect(fn(1)).toBe('1');
});
it('returns "false" for false', function () {
expect(fn(false)).toBe('false');
});
})
describe('sanitize', function () {
it('test', function () {
var str = '<a href="javascript:fix">SSS</a><img onclick=333 src=http://tp2.sinaimg.cn/1823438905/180/40054009869/1/><p onfocus="aaa" ontap="ddd" title=eee onkeypress=eee>onmousewheel=eee<span onmouseup="ddd">DDD</span></p><script>alert(1)<\/script>222222'
var ret = avalon.filters.sanitize(str)
expect(ret.indexOf('fix')).toBe(-1)
expect(ret.indexOf('onclick')).toBe(-1)
expect(ret.indexOf('ontap')).toBe(-1)
expect(ret.indexOf('onkeypress')).toBe(-1)
expect(ret.indexOf('onfocus')).toBe(-1)
expect(ret.indexOf('onmouseup')).toBe(-1)
expect(ret.indexOf('<script')).toBe(-1)
expect(ret.indexOf('onmousewheel')).not.toBe(-1)
})
})
describe('camelize', function () {
var fn = avalon.filters.camelize
it('test', function () {
expect(fn('aa-bb')).toBe('aaBb')
expect(fn('aa_cb')).toBe('aaCb')
})
})
describe('number', function () {
var fn = avalon.filters.number
it('test', function () {
expect(fn(1234.56, 0)).toBe('1,235')
expect(fn(1.234567, 1)).toBe('1.2')
expect(fn(1111111111)).toBe('1,111,111,111.000')
expect(fn(1111111111, 2, '.', '-')).toBe('1-111-111-111.00')
expect(fn(2, 4)).toBe('2.0000')
expect(fn(1250, 2)).toBe('1,250.00')
expect(fn(1250, 2)).toBe('1,250.00')
expect(fn(2000, 2, '.', '.')).toBe('2.000.00')
expect(fn(1e-8, 8, '.', '')).toBe('0.00000001')
})
})
describe('truncate', function () {
var fn = avalon.filters.truncate
it('test', function () {
expect(fn('大跃进大发展', 5, '***')).toBe('大跃***')
expect(fn('1122dsfdsfdsfdsfdffsfdsfewrewrw5')).toBe('1122dsfdsfdsfdsfdffsfdsfewr...')
expect(fn('1122dsfdsfdsfdsfdffsfdsfewrewrw5', -5)).toBe('1122dsfdsfdsfdsfdffsfdsf...')
expect(fn(null)).toBe('')
expect(fn('')).toBe('')
})
})
describe('currency', function () {
var fn = avalon.filters.currency
it('test', function () {
expect(fn(2500)).toBe('¥2,500.00')
expect(fn(2500, 'RMB')).toBe('RMB2,500.00')
})
})
describe('filterBy', function () {
var fn = avalon.filters.filterBy
it('test', function () {
try {
fn(111)
} catch (e) {
expect(e).toBe('filterBy只能处理对象或数组')
}
expect(fn(['aaa', 'bbaa', 'ccc', 'daad'], 'aa')).toEqual(['aaa', 'bbaa', 'daad'])
expect(fn(['aaa', 'bbaa', 'ccc', 'ddd'], '')).toEqual(['aaa', 'bbaa', 'ccc', 'ddd'])
expect(fn(['aa11', '1122', '66', '2113'], 11)).toEqual(['aa11', '1122', '2113'])
expect(fn(['aaa', 'bbaa', 'ccc', 'ddd'], true)).toEqual(['aaa', 'bbaa', 'ccc', 'ddd'])
expect(fn(['aa11', '1122', '66', '2113'], function (a) {
return /2/.test(a)
})).toEqual(['1122', '2113'])
expect(fn({
a: 111,
b: 212,
c: 332
}, function (a) {
return /2/.test(a)
})).toEqual({
b: 212,
c: 332
})
})
})
describe('selectBy', function () {
var fn = avalon.filters.selectBy
it('test', function () {
expect(fn('aaa', 'aa')).toEqual('aaa')
expect(fn(['aaa', 'bbaa', 'ccc', 'ddd'], '')).toEqual(['aaa', 'bbaa', 'ccc', 'ddd'])
expect(fn({
aaa: 1,
bbb: 2,
ccc: 3
}, ['aaa', 'bbb'])).toEqual([1, 2])
expect(fn({
aaa: 1,
bbb: 2,
ccc: 3
}, ['aaa', 'bbb', 'ddd'], { ddd: 4 })).toEqual([1, 2, 4])
})
})
describe('limitBy', function () {
var fn = avalon.filters.limitBy
it('test', function () {
try {
fn(1111)
} catch (e) {
expect(e).toEqual('limitBy只能处理对象或数组');
}
expect(fn([11], 'ddd')).toEqual([11])
expect(fn([11], NaN)).toEqual([11])
expect(fn({ a: 1, b: 2, c: 3 }, 2)).toEqual({ a: 1, b: 2 })
expect(fn([111, 222, 333, 444, 555], 2)).toEqual([111, 222])
expect(fn([111, 222, 333, 444, 555], 7)).toEqual([111, 222, 333, 444, 555])
expect(fn([111, 222, 333, 444, 555], 2, 2)).toEqual([333, 444])
expect(fn([111, 222, 333, 444, 555, 666], 2, -2)).toEqual([555, 666])
expect(fn([111, 222, 333, 444, 555, 666], 3.5)).toEqual([111, 222, 333])
})
})
describe('orderBy', function () {
var fn = avalon.filters.orderBy
it('test', function () {
try {
fn(1111)
} catch (e) {
expect(e).toEqual('orderBy只能处理对象或数组');
}
expect(fn([{ a: 1 }, { a: 3 }, { a: 2 }, { a: 4 }], 'a', 1)).
toEqual([{ a: 1 }, { a: 2 }, { a: 3 }, { a: 4 }])
expect(fn([{ a: 1 }, { a: 3 }, { a: 2 }, { a: 5 }], 'a', -1)).
toEqual([{ a: 5 }, { a: 3 }, { a: 2 }, { a: 1 }])
var newArr = fn([{ a: 1 }, { a: NaN }, { a: 2 }, { a: NaN }], 'a')
expect(newArr).
toEqual([{ a: 1 }, { a: 2 }, { a: NaN }, { a: NaN }])
expect(newArr.map(function (el) { return el.a }).join(',')).toBe('1,2,NaN,NaN')
expect(fn([1,3,8,2], 111)).toEqual([1,2,3,8])
expect(fn([111, 222, 33, 444, 5585], function (a) {
return String(a).length
})).toEqual([33, 111, 222, 444, 5585])
expect(fn({
a: { v: 4 },
d: { v: 1 },
rr: { v: 3 },
e33: { v: 2 },
}, 'v')).toEqual({
d: { v: 1 },
e33: { v: 2 },
rr: { v: 3 },
a: { v: 4 }
})
})
})
describe('date', function () {
var fn = avalon.filters.date
it('test', function () {
var format = 'yyyy MM dd'
expect(fn(new Date('2014/4/1'), format)).toBe('2014 04 01')
expect(fn('2011/07/08', format)).toBe('2011 07 08')
expect(fn('2011-07-08', format)).toBe('2011 07 08')
expect(fn('01-10-2000', format)).toBe('2000 01 10')
expect(fn('07 04,2000', format)).toBe('2000 07 04')
expect(fn('3 14,2000', format)).toBe('2000 03 14')
expect(fn('1373021259229', format)).toBe('2013 07 05')
expect(fn('2014-06-10T15:21:2', format)).toBe('2014 06 10')
expect(fn('2014-12-07T22:50:58.33+08:00', format)).toBe('2014 12 07')
expect(fn('2015-01-31 00:00:00', 'yyyy-MM-dd')).toBe('2015-01-31')
expect(fn('\/Date(1216796600500)\/', 'yyyy-MM-dd')).toBe('2008-07-23')
expect(fn(1373021259229, format)).toBe('2013 07 05')
expect(fn(new Date('2014/4/1'), 'yyyy MM dd')).toBe('2014 04 01')
expect(fn('1373021259229', 'yyyy MM dd')).toBe('2013 07 05')
expect(fn(1373021259229, 'yyyy MM dd')).toBe('2013 07 05')
expect(fn('2014-12-07T22:50:58+08:00', 'yyyy MM dd')).toBe('2014 12 07')
expect(fn('\/Date(1373021259229)\/', 'yyyy MM dd')).toBe('2013 07 05')
})
it('EEE', function () {
var date = new Date(2016, 7, 26)
expect(fn(date, 'EEEE')).toBe('星期五')
expect(fn(date, 'EEE')).toBe('周五')
expect(fn(date, 'MMMM')).toBe('8月')
expect(fn(date, 'MMM')).toBe('8月')
})
it('Z', function () {
var date = new Date(2016, 7, 26)
expect(fn(date, 'Z')).toMatch(/(-|\+)\d+/)
})
it('shortName', function () {
var date = new Date(2016, 7, 26, 12, 4, 5)
expect(fn(date)).toBe('2016-8-26')
expect(fn(date, 'medium')).toBe('2016-8-26 12:04:05')
expect(fn(date, 'short')).toBe('16-8-26 下午12:04')
expect(fn(date, 'fullDate')).toBe('2016年8月26日星期五')
expect(fn(date, 'yyyy-MM-dd a')).toBe('2016-08-26 下午')
date = new Date(2016, 7, 26, 8, 4, 5)
expect(fn(date, 'yyyy-MM-dd a')).toBe('2016-08-26 上午')
})
})
describe('事件过滤器', function () {
it("$return", function () {
var fn = avalon.filters.enter
var e = { which: 11 }
fn(e)
expect(e.$return).toBe(true)
var e = { which: 13 }
fn(e)
expect(e.$return).toBe(void 0)
})
it('stop and prevent', function () {
var e = {
stopPropagation: function () { },
preventDefault: function () { }
}
spyOn(e, 'stopPropagation')
spyOn(e, 'preventDefault')
avalon.filters.stop(e)
avalon.filters.prevent(e)
expect(e.stopPropagation).toHaveBeenCalled()
expect(e.preventDefault).toHaveBeenCalled()
})
})
})