ran-boilerplate
Version:
React . Apollo (GraphQL) . Next.js Toolkit
178 lines (146 loc) • 5.63 kB
JavaScript
define(['argue', 'chai'], function(__, chai) {
var should = chai.should();
describe('optional parameters', function() {
describe('optional parameters', function() {
it('should accept both defined and not defined arguments', function() {
function upper() {
return __({
param : [String]
});
}
//right:
var emptyCall = upper();
emptyCall.should.have.ownProperty('param')
should.not.exist(emptyCall.param);
var stringCall = upper("value");
should.equal(stringCall.param, "value");
//wrong:
(function(){
upper(7);
}).should.throw('Incompatible type signature. Expecting ( [String] ), given ( Number ).');
(function(){
upper("value", 7);
}).should.throw('Too many arguments');
});
it('should hit the target among similars', function() {
function range() {
return __({
start : [Number, 1],
stop : Number,
step : [Number, 1]
});
}
//right:
var oneArg = range(7);
should.equal(oneArg.start, 1);
should.equal(oneArg.stop, 7);
should.equal(oneArg.step, 1);
var twoArg = range(3, 7);
should.equal(twoArg.start, 3);
should.equal(twoArg.stop, 7);
should.equal(twoArg.step, 1);
var threeArg = range(3, 7, 2);
should.equal(threeArg.start, 3);
should.equal(threeArg.stop, 7);
should.equal(threeArg.step, 2);
//wrong:
(function(){
range(3, 7, 1, 0);
}).should.throw('Too many arguments');
});
it('should hit the target among similars test case #2', function() {
function upper() {
return __({
first: [String],
middle: [String],
last: String
});
}
//right:
var lastArg = 'should be last';
// Here, we are forcing the arguments parser to delete 2 argument lists in a row.
var oneArg = upper(lastArg);
should.equal(oneArg.first, undefined);
should.equal(oneArg.middle, undefined);
should.equal(oneArg.last, lastArg);
var firstArg = 'should be first'
var twoArg = upper(firstArg, lastArg);
should.equal(twoArg.first, firstArg);
should.equal(twoArg.middle, undefined);
should.equal(twoArg.last, lastArg);
});
it('should not worry about not set optional arguments', function() {
function upper() {
return __({
first : Number,
second : [String],
third : [String],
fourth : [String],
fifth : [String],
sixth : [Number]
});
}
//right:
var numberAlone = upper(7);
numberAlone.first.should.be.equal(7)
numberAlone.should
.have.ownProperty('second')
.have.ownProperty('third')
.have.ownProperty('fourth')
.have.ownProperty('fifth')
.have.ownProperty('sixth');
should.not.exist(numberAlone.second);
should.not.exist(numberAlone.third);
should.not.exist(numberAlone.fourth);
should.not.exist(numberAlone.fifth);
should.not.exist(numberAlone.sixth);
var numberAndUndefined = upper(7, undefined, undefined, undefined, undefined, undefined);
numberAndUndefined.first.should.be.equal(7)
numberAndUndefined.should
.have.ownProperty('second')
.have.ownProperty('third')
.have.ownProperty('fourth')
.have.ownProperty('fifth')
.have.ownProperty('sixth');
should.not.exist(numberAndUndefined.second);
should.not.exist(numberAndUndefined.third);
should.not.exist(numberAndUndefined.fourth);
should.not.exist(numberAndUndefined.fifth);
should.not.exist(numberAndUndefined.sixth);
var numberStrings = upper(7, "value", "value", "value", "value", 7);
numberStrings.first.should.be.equal(7);
numberStrings.second.should.be.equal("value");
numberStrings.third.should.be.equal("value");
numberStrings.fourth.should.be.equal("value");
numberStrings.fifth.should.be.equal("value");
numberStrings.sixth.should.be.equal(7);
//wrong:
(function(){
upper("value", 7);
}).should.throw("parameter 'first' waiting for Number argument but received String");
(function(){
upper(7, true);
}).should.throw('Incompatible type signature. Expecting ( Number, [String], [String], [String], [String], [Number] ), given ( Number, Boolean ).');
(function(){
upper(7, 7, 7);
}).should.throw('Incompatible type signature. Expecting ( Number, [String], [String], [String], [String], [Number] ), given ( Number, Number, Number ).');
});
});
describe('default values', function() {
it('should accept both defined and not defined arguments', function() {
function upper() {
return __({
param : [Number, 3]
});
}
//right:
should.equal(upper().param, 3);
should.equal(upper(7).param, 7);
//wrong:
(function(){
upper('unknown');
}).should.throw("Incompatible type signature. Expecting ( [Number] ), given ( String ).");
});
});
});
});