You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							174 lines
						
					
					
						
							4.7 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							174 lines
						
					
					
						
							4.7 KiB
						
					
					
				
								var options = require("..");
							 | 
						|
								
							 | 
						|
								exports.noneIsAnOption = function(test) {
							 | 
						|
								    test.equal(true, options.isOption(options.none));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.someIsAnOption = function(test) {
							 | 
						|
								    test.equal(true, options.isOption(options.some(4)));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.nullIsNotAnOption = function(test) {
							 | 
						|
								    test.equal(false, options.isOption(null));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.stringIsNotAnOption = function(test) {
							 | 
						|
								    test.equal(false, options.isOption("surrender"));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports["none.isNone() returns true"] = function(test) {
							 | 
						|
								    test.equal(true, options.none.isNone());
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports["none.isSome() returns false"] = function(test) {
							 | 
						|
								    test.equal(false, options.none.isSome());
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports["some(_).isNone() returns false"] = function(test) {
							 | 
						|
								    test.equal(false, options.some(1).isNone());
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports["some(_).isSome() returns true"] = function(test) {
							 | 
						|
								    test.equal(true, options.some(1).isSome());
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.fromNullableConvertsNullToNone = function(test) {
							 | 
						|
								    test.deepEqual(options.none, options.fromNullable(null));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.fromNullableConvertsUndefinedToNone = function(test) {
							 | 
						|
								    test.deepEqual(options.none, options.fromNullable(undefined));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.fromNullableConvertsNumberToSome = function(test) {
							 | 
						|
								    test.deepEqual(options.some(5), options.fromNullable(5));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.mappingOverNoneHasNoEffect = function(test) {
							 | 
						|
								    test.equal(options.none, options.none.map(function() { return true }));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.mappingOverSomeAppliesFunctionToValue = function(test) {
							 | 
						|
								    test.deepEqual(options.some(4), options.some(2).map(function(value) {
							 | 
						|
								        return value * value; 
							 | 
						|
								    }));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports["none.flatMap(_) returns none"] = function(test) {
							 | 
						|
								    test.deepEqual(options.none, options.none.flatMap(function(value) {
							 | 
						|
								        return options.some("apple");
							 | 
						|
								    }));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								exports["when func(value) is none, then some(value).flatMap(func) returns none"] = function(test) {
							 | 
						|
								    test.deepEqual(options.none, options.some(2).flatMap(function(value) {
							 | 
						|
								        return options.none;
							 | 
						|
								    }));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								exports["when func(value) is some(result), then some(value).flatMap(func) returns some(result)"] = function(test) {
							 | 
						|
								    test.deepEqual(options.some(4), options.some(2).flatMap(function(value) {
							 | 
						|
								        return options.some(value * value);
							 | 
						|
								    }));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.noneToArrayIsEmptyArray = function(test) {
							 | 
						|
								    test.deepEqual([], options.none.toArray());
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.someToArrayIsSingleElementArray = function(test) {
							 | 
						|
								    test.deepEqual(["apple"], options.some("apple").toArray());
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.noneValueOrElseCallsPassedValueIfItsAFunction = function(test) {
							 | 
						|
								    test.deepEqual(4, options.none.valueOrElse(function() { return 4; }));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.noneValueOrElseReturnsArgumentIfItsNotAFunction = function(test) {
							 | 
						|
								    test.deepEqual(4, options.none.valueOrElse(4));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.someValueOrElseReturnsWrappedValue = function(test) {
							 | 
						|
								    test.deepEqual(1, options.some(1).valueOrElse(function() { return 4; }));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.noneOrElseReturnsArgumentIfItsNotAFunction = function(test) {
							 | 
						|
								    test.deepEqual(options.some(4), options.none.orElse(options.some(4)));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.noneOrElseCallsArgumentIfItsAFunction = function(test) {
							 | 
						|
								    test.deepEqual(options.some(4), options.none.orElse(function() { return options.some(4); }));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.someOrElseReturnsTheCurrentOption = function(test) {
							 | 
						|
								    test.deepEqual(options.some(1), options.some(1).orElse(4));
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.callingValueOnNoneRaisesError = function(test) {
							 | 
						|
								    test.throws(function(){
							 | 
						|
								        options.none.value();
							 | 
						|
								    }, /Called value on none/);
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports.callingValueOnSomeReturnsValue = function(test) {
							 | 
						|
								    test.deepEqual(4, options.some(4).value());
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports["none.filter returns none"] = function(test) {
							 | 
						|
								    function equals3(x) {
							 | 
						|
								        return x === 3;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    test.deepEqual(options.none.filter(equals3), options.none);
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports["when predicate(value) is true, some(value).filter(predicate) returns some(value)"] = function(test) {
							 | 
						|
								    var some3 = options.some(3);
							 | 
						|
								
							 | 
						|
								    function equals3(x) {
							 | 
						|
								        return x === 3;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    test.deepEqual(some3.filter(equals3), some3);
							 | 
						|
								    test.done();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								exports["when predicate(value) is false, some(value).filter(predicate) returns none"] = function(test) {
							 | 
						|
								    var some11 = options.some(11);
							 | 
						|
								
							 | 
						|
								    function equals3(x) {
							 | 
						|
								        return x === 3;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    test.deepEqual(some11.filter(equals3), options.none);
							 | 
						|
								    test.done();
							 | 
						|
								};
							 |