/* global require, chai, describe, before, it */
|
/* global window */
|
// 数据占位符定义(Data Placeholder Definition,DPD)
|
var expect = chai.expect
|
var Mock, $, _
|
|
describe('Schema', function() {
|
before(function(done) {
|
require(['mock', 'underscore', 'jquery'], function() {
|
Mock = arguments[0]
|
window.XMLHttpRequest = Mock.XHR
|
_ = arguments[1]
|
$ = arguments[2]
|
expect(Mock).to.not.equal(undefined)
|
expect(_).to.not.equal(undefined)
|
expect($).to.not.equal(undefined)
|
done()
|
})
|
})
|
|
function stringify(json) {
|
return JSON.stringify(json /*, null, 4*/ )
|
}
|
|
function doit(template, validator) {
|
it('', function() {
|
var schema = Mock.toJSONSchema(template)
|
this.test.title = (stringify(template) || template.toString()) + ' => ' + stringify(schema)
|
validator(schema)
|
})
|
}
|
|
describe('Type', function() {
|
doit(1, function(schema) {
|
expect(schema.name).to.be.an('undefined')
|
// expect(schema).to.not.have.property('name')
|
expect(schema).to.have.property('type', 'number')
|
for (var n in schema.rule) {
|
expect(schema.rule[n]).to.be.null()
|
}
|
})
|
doit(true, function(schema) {
|
expect(schema.name).to.be.an('undefined')
|
// expect(schema).to.not.have.property('name')
|
expect(schema).to.have.property('type', 'boolean')
|
for (var n in schema.rule) {
|
expect(schema.rule[n]).to.be.null()
|
}
|
})
|
doit('', function(schema) {
|
expect(schema.name).to.be.an('undefined')
|
// expect(schema).to.not.have.property('name')
|
expect(schema).to.have.property('type', 'string')
|
for (var n in schema.rule) {
|
expect(schema.rule[n]).to.be.null()
|
}
|
})
|
doit(function() {}, function(schema) {
|
expect(schema.name).to.be.an('undefined')
|
// expect(schema).to.not.have.property('name')
|
expect(schema).to.have.property('type', 'function')
|
for (var n in schema.rule) {
|
expect(schema.rule[n]).to.be.null()
|
}
|
})
|
doit(/\d/, function(schema) {
|
expect(schema.name).to.be.an('undefined')
|
// expect(schema).to.not.have.property('name')
|
expect(schema).to.have.property('type', 'regexp')
|
for (var n in schema.rule) {
|
expect(schema.rule[n]).to.be.null()
|
}
|
})
|
doit([], function(schema) {
|
expect(schema.name).to.be.an('undefined')
|
// expect(schema).to.not.have.property('name')
|
expect(schema).to.have.property('type', 'array')
|
for (var n in schema.rule) {
|
expect(schema.rule[n]).to.be.null()
|
}
|
expect(schema).to.have.property('items').with.length(0)
|
})
|
doit({}, function(schema) {
|
expect(schema.name).to.be.an('undefined')
|
// expect(schema).to.not.have.property('name')
|
expect(schema).to.have.property('type', 'object')
|
for (var n in schema.rule) {
|
expect(schema.rule[n]).to.be.null()
|
}
|
expect(schema).to.have.property('properties').with.length(0)
|
})
|
|
})
|
|
describe('Object', function() {
|
doit({
|
a: {
|
b: {
|
c: {
|
d: {}
|
}
|
}
|
}
|
}, function(schema) {
|
expect(schema.name).to.be.an('undefined')
|
// expect(schema).to.not.have.property('name')
|
expect(schema).to.have.property('type', 'object')
|
|
var properties;
|
|
// root.properties
|
properties = schema.properties
|
expect(properties).to.with.length(1)
|
expect(properties[0]).to.have.property('name', 'a')
|
expect(properties[0]).to.have.property('type', 'object')
|
|
// root.a.properties
|
properties = properties[0].properties
|
expect(properties).to.with.length(1)
|
expect(properties[0]).to.have.property('name', 'b')
|
expect(properties[0]).to.have.property('type', 'object')
|
|
// root.a.b.properties
|
properties = properties[0].properties
|
expect(properties).to.with.length(1)
|
expect(properties[0]).to.have.property('name', 'c')
|
expect(properties[0]).to.have.property('type', 'object')
|
|
// root.a.b.c.properties
|
properties = properties[0].properties
|
expect(properties).to.with.length(1)
|
expect(properties[0]).to.have.property('name', 'd')
|
expect(properties[0]).to.have.property('type', 'object')
|
|
// root.a.b.c.d.properties
|
properties = properties[0].properties
|
expect(properties).to.with.length(0)
|
})
|
|
})
|
|
describe('Array', function() {
|
doit([
|
[
|
['foo', 'bar']
|
]
|
], function(schema) {
|
expect(schema.name).to.be.an('undefined')
|
// expect(schema).to.not.have.property('name')
|
expect(schema).to.have.property('type', 'array')
|
|
var items;
|
|
// root.items
|
items = schema.items
|
expect(items).to.with.length(1)
|
expect(items[0]).to.have.property('type', 'array')
|
|
// root[0].items
|
items = items[0].items
|
expect(items).to.with.length(1)
|
expect(items[0]).to.have.property('type', 'array')
|
|
// root[0][0].items
|
items = items[0].items
|
expect(items).to.with.length(2)
|
expect(items[0]).to.have.property('type', 'string')
|
expect(items[1]).to.have.property('type', 'string')
|
})
|
})
|
|
describe('String Rule', function() {
|
doit({
|
'string|1-10': '★'
|
}, function(schema) {
|
expect(schema.name).to.be.an('undefined')
|
// expect(schema).to.not.have.property('name')
|
expect(schema).to.have.property('type', 'object')
|
|
var properties;
|
// root.properties
|
properties = schema.properties
|
expect(properties).to.with.length(1)
|
expect(properties[0]).to.have.property('type', 'string')
|
expect(properties[0].rule).to.have.property('min', 1)
|
expect(properties[0].rule).to.have.property('max', 10)
|
})
|
doit({
|
'string|3': 'value',
|
}, function(schema) {
|
expect(schema.name).to.be.an('undefined')
|
// expect(schema).to.not.have.property('name')
|
expect(schema).to.have.property('type', 'object')
|
|
var properties;
|
// root.properties
|
properties = schema.properties
|
expect(properties).to.with.length(1)
|
expect(properties[0]).to.have.property('type', 'string')
|
expect(properties[0].rule).to.have.property('min', 3)
|
expect(properties[0].rule.max).to.be.an('undefined')
|
})
|
})
|
|
})
|