// 数据占位符定义(Data Placeholder Definition,DPD) import { expect } from 'chai'; import _ from 'underscore'; describe('Random', function () { function doit(expression: string, validator: any) { it(expression, function () { for (var i = 0; i < 5; i++) { var data = eval(expression); validator(data); } }); } describe('Basic', function () { doit('Random.boolean()', function (data: any) { expect(data).to.be.a('boolean'); }); doit('Random.natural()', function (data: any) { expect(data).to.be.a('number').within(0, 9007199254740992); }); doit('Random.natural(1, 3)', function (data: any) { expect(data).to.be.a('number').within(1, 3); }); doit('Random.natural(1)', function (data: any) { expect(data).to.be.a('number').least(1); }); doit('Random.integer()', function (data: any) { expect(data).to.be.a('number').within(-9007199254740992, 9007199254740992); }); doit('Random.integer(-10, 10)', function (data: any) { expect(data).to.be.a('number').within(-10, 10); }); // 1 整数部分 2 小数部分 var RE_FLOAT = /(\-?\d+)\.?(\d+)?/; function validFloat(float: number, min: number, max: number, dmin: number, dmax: number) { RE_FLOAT.lastIndex = 0; var parts = RE_FLOAT.exec(float + ''); expect(+parts![1]) .to.be.a('number') .within(min, max); /* jshint -W041 */ if (parts![2] != undefined) { expect(parts![2]).to.have.length.within(dmin, dmax); } } doit('Random.float()', function (data: any) { validFloat(data, -9007199254740992, 9007199254740992, 0, 17); }); doit('Random.float(0)', function (data: any) { validFloat(data, 0, 9007199254740992, 0, 17); }); doit('Random.float(60, 100)', function (data: any) { validFloat(data, 60, 100, 0, 17); }); doit('Random.float(60, 100, 3)', function (data: any) { validFloat(data, 60, 100, 3, 17); }); doit('Random.float(60, 100, 3, 5)', function (data: any) { validFloat(data, 60, 100, 3, 5); }); var CHARACTER_LOWER = 'abcdefghijklmnopqrstuvwxyz'; var CHARACTER_UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; var CHARACTER_NUMBER = '0123456789'; var CHARACTER_SYMBOL = '!@#$%^&*()[]'; doit('Random.character()', function (data: any) { expect(data).to.be.a('string').with.length(1); expect(CHARACTER_LOWER + CHARACTER_UPPER + CHARACTER_NUMBER + CHARACTER_SYMBOL).to.include(data); }); doit('Random.character("lower")', function (data: any) { expect(data).to.be.a('string').with.length(1); expect(CHARACTER_LOWER).to.include(data); }); doit('Random.character("upper")', function (data: any) { expect(data).to.be.a('string').with.length(1); expect(CHARACTER_UPPER).to.include(data); }); doit('Random.character("number")', function (data: any) { expect(data).to.be.a('string').with.length(1); expect(CHARACTER_NUMBER).to.include(data); }); doit('Random.character("symbol")', function (data: any) { expect(data).to.be.a('string').with.length(1); expect(CHARACTER_SYMBOL).to.include(data); }); doit('Random.character("aeiou")', function (data: any) { expect(data).to.be.a('string').with.length(1); expect('aeiou').to.include(data); }); doit('Random.string()', function (data: any) { expect(data).to.be.a('string').with.length.within(3, 7); }); doit('Random.string(5)', function (data: any) { expect(data).to.be.a('string').with.length(5); }); doit('Random.string("lower", 5)', function (data: any) { expect(data).to.be.a('string').with.length(5); for (var i = 0; i < data.length; i++) { expect(CHARACTER_LOWER).to.include(data[i]); } }); doit('Random.string(7, 10)', function (data: any) { expect(data).to.be.a('string').with.length.within(7, 10); }); doit('Random.string("aeiou", 1, 3)', function (data: any) { expect(data).to.be.a('string').with.length.within(1, 3); for (var i = 0; i < data.length; i++) { expect('aeiou').to.include(data[i]); } }); doit('Random.range(10)', function (data: any) { expect(data).to.be.an('array').with.length(10); }); doit('Random.range(3, 7)', function (data: any) { expect(data).to.be.an('array').deep.equal([3, 4, 5, 6]); }); doit('Random.range(1, 10, 2)', function (data: any) { expect(data).to.be.an('array').deep.equal([1, 3, 5, 7, 9]); }); doit('Random.range(1, 10, 3)', function (data: any) { expect(data).to.be.an('array').deep.equal([1, 4, 7]); }); var RE_DATE = /\d{4}-\d{2}-\d{2}/; var RE_TIME = /\d{2}:\d{2}:\d{2}/; var RE_DATETIME = new RegExp(RE_DATE.source + ' ' + RE_TIME.source); doit('Random.date()', function (data: any) { expect(RE_DATE.test(data)).to.be.true; }); doit('Random.time()', function (data: any) { expect(RE_TIME.test(data)).to.be.true; }); doit('Random.datetime()', function (data: any) { expect(RE_DATETIME.test(data)).to.be.true; }); doit('Random.datetime("yyyy-MM-dd A HH:mm:ss")', function (data: any) { expect(data).to.be.ok; }); doit('Random.datetime("yyyy-MM-dd a HH:mm:ss")', function (data: any) { expect(data).to.be.ok; }); doit('Random.datetime("yy-MM-dd HH:mm:ss")', function (data: any) { expect(data).to.be.ok; }); doit('Random.datetime("y-MM-dd HH:mm:ss")', function (data: any) { expect(data).to.be.ok; }); doit('Random.datetime("y-M-d H:m:s")', function (data: any) { expect(data).to.be.ok; }); doit('Random.datetime("yyyy yy y MM M dd d HH H hh h mm m ss s SS S A a T")', function (data: any) { expect(data).to.be.ok; }); doit('Random.now()', function (data: any) { expect(data).to.be.ok; }); doit('Random.now("year")', function (data: any) { expect(data).to.be.ok; }); doit('Random.now("month")', function (data: any) { expect(data).to.be.ok; }); doit('Random.now("day")', function (data: any) { expect(data).to.be.ok; }); doit('Random.now("hour")', function (data: any) { expect(data).to.be.ok; }); doit('Random.now("minute")', function (data: any) { expect(data).to.be.ok; }); doit('Random.now("second")', function (data: any) { expect(data).to.be.ok; }); doit('Random.now("week")', function (data: any) { expect(data).to.be.ok; }); doit('Random.now("yyyy-MM-dd HH:mm:ss SS")', function (data: any) { expect(data).to.be.ok; }); }); describe('Image', function () { doit('Random.image()', function (data: any) { expect(data).to.be.ok; }); doit('Random.dataImage()', function (data: any) { expect(data).to.be.ok; }); doit('Random.dataImage("200x100")', function (data: string) { expect(data).to.be.ok; }); doit('Random.dataImage("200x100", "Hello Mock.js!")', function (data: string) { expect(data).to.be.ok; }); }); var RE_COLOR = /^#[0-9a-fA-F]{6}$/; var RE_COLOR_RGB = /^rgb\(\d{1,3},\d{1,3},\d{1,3}\)$/; var RE_COLOR_RGBA = /^rgba\(\d{1,3},\d{1,3},\d{1,3},0\.\d*\)$/; var RE_COLOR_HSL = /^hsl\(\d{1,3},\d{1,3}%,\d{1,3}%\)$/; describe('Color', function () { doit('Random.color()', function (data: any) { expect(data).match(RE_COLOR); }); doit('Random.hex()', function (data: any) { expect(data).match(RE_COLOR); }); doit('Random.rgb()', function (data: any) { expect(data).match(RE_COLOR_RGB); }); doit('Random.rgba()', function (data: any) { expect(data).match(RE_COLOR_RGBA); }); doit('Random.hsl()', function (data: any) { expect(data).match(RE_COLOR_HSL); }); }); describe('Text', function () { doit('Random.paragraph()', function (data: string) { expect(data.split('.').filter((i) => i)).to.have.length.within(3, 7); }); doit('Random.paragraph(2)', function (data: string) { expect(data.split('.').filter((i) => i)).to.have.length.within(2, 2); }); doit('Random.paragraph(1, 3)', function (data: string) { expect(data.split('.').filter((i) => i)).to.have.length.within(1, 3); }); doit('Random.sentence()', function (data: any) { expect(data[0]).to.equal(data.toUpperCase()[0]); expect(data.split(' ')).to.have.length.within(12, 18); }); doit('Random.sentence(4)', function (data: any) { expect(data[0]).to.equal(data.toUpperCase()[0]); expect(data.split(' ')).to.have.length.within(4, 4); }); doit('Random.sentence(3, 5)', function (data: any) { expect(data[0]).to.equal(data.toUpperCase()[0]); expect(data.split(' ')).to.have.length.within(3, 5); }); doit('Random.word()', function (data: any) { expect(data).to.have.length.within(3, 10); }); doit('Random.word(4)', function (data: any) { expect(data).to.have.length(4); }); doit('Random.word(3, 5)', function (data: any) { expect(data).to.have.length.within(3, 5); }); doit('Random.title()', function (data: any) { var words = data.split(' '); _.each(words, function (word) { expect(word[0]).to.equal(word[0].toUpperCase()); }); expect(words).to.have.length.within(3, 7); }); doit('Random.title(4)', function (data: any) { var words = data.split(' '); _.each(words, function (word) { expect(word[0]).to.equal(word[0].toUpperCase()); }); expect(words).to.have.length(4); }); doit('Random.title(3, 5)', function (data: any) { var words = data.split(' '); _.each(words, function (word) { expect(word[0]).to.equal(word[0].toUpperCase()); }); expect(words).to.have.length.within(3, 5); }); }); describe('Name', function () { doit('Random.first()', function (data: any) { expect(data[0]).to.equal(data[0].toUpperCase()); }); doit('Random.last()', function (data: any) { expect(data[0]).to.equal(data[0].toUpperCase()); }); doit('Random.name()', function (data: any) { var words = data.split(' '); expect(words).to.have.length(2); expect(words[0][0]).to.equal(words[0][0].toUpperCase()); expect(words[1][0]).to.equal(words[1][0].toUpperCase()); }); doit('Random.name(true)', function (data: any) { var words = data.split(' '); expect(words).to.have.length(3); expect(words[0][0]).to.equal(words[0][0].toUpperCase()); expect(words[1][0]).to.equal(words[1][0].toUpperCase()); expect(words[2][0]).to.equal(words[2][0].toUpperCase()); }); doit('Random.cfirst()', function (data: any) { expect(data).to.be.ok; }); doit('Random.clast()', function (data: any) { expect(data).to.be.ok; }); doit('Random.cname()', function (data: any) { expect(data).to.be.ok; }); }); var RE_URL = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; var RE_IP = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; describe('Web', function () { doit('Random.url()', function (data: any) { expect(RE_URL.test(data)).to.be.true; }); doit('Random.domain()', function (data: any) { expect(data).to.be.ok; }); doit('Random.domain("com")', function (data: any) { expect(data).to.include('.com'); }); doit('Random.tld()', function (data: any) { expect(data).to.be.ok; }); doit('Random.email()', function (data: any) { expect(data).to.be.ok; }); doit('Random.email("nuysoft.com")', function (data: any) { expect(data).to.include('@nuysoft.com'); }); doit('Random.ip()', function (data: any) { expect(RE_IP.test(data)).to.be.true; }); }); describe('Address', function () { doit('Random.region()', function (data: any) { expect(data).to.be.ok; }); doit('Random.province()', function (data: any) { expect(data).to.be.ok; }); doit('Random.city()', function (data: any) { expect(data).to.be.ok; }); doit('Random.city(true)', function (data: any) { expect(data).to.be.ok; }); doit('Random.county()', function (data: any) { expect(data).to.be.ok; }); doit('Random.county(true)', function (data: any) { expect(data).to.be.ok; }); doit('Random.zip()', function (data: any) { expect(data).to.be.ok; }); }); describe('Helpers', function () { doit('Random.capitalize("hello")', function (data: any) { expect(data).to.equal('Hello'); }); doit('Random.upper("hello")', function (data: any) { expect(data).to.equal('HELLO'); }); doit('Random.lower("HELLO")', function (data: any) { expect(data).to.equal('hello'); }); doit('Random.pick("a", "e", "i", "o", "u")', function (data: any) { expect(['a', 'e', 'i', 'o', 'u']).to.include(data); }); doit('Random.shuffle("a", "e", "i", "o", "u")', function (data: any) { expect(data.join('')).to.not.equal('aeiou'); expect(data.sort().join('')).to.equal('aeiou'); }); }); var RE_GUID = /[a-fA-F0-9]{8}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{12}/; describe('Miscellaneous', function () { doit('Random.guid()', function (data: any) { expect(data).to.be.a('string').with.length(36); expect(RE_GUID.test(data)).to.be.true; }); doit('Random.id()', function (data: any) { expect(data).to.be.a('string').with.length(18); }); }); });