339 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			339 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import 'mocha';
 | 
						|
import * as dirtyChai from 'dirty-chai';
 | 
						|
import * as chai from 'chai';
 | 
						|
import {BigNumber} from 'bignumber.js';
 | 
						|
import {schemas} from '@0xproject/json-schemas';
 | 
						|
import {assert} from '../src/index';
 | 
						|
 | 
						|
chai.config.includeStack = true;
 | 
						|
chai.use(dirtyChai);
 | 
						|
const expect = chai.expect;
 | 
						|
 | 
						|
describe('Assertions', () => {
 | 
						|
    const variableName = 'variable';
 | 
						|
    describe('#isBigNumber', () => {
 | 
						|
        it('should not throw for valid input', () => {
 | 
						|
            const validInputs = [
 | 
						|
                new BigNumber(23),
 | 
						|
                new BigNumber('45'),
 | 
						|
            ];
 | 
						|
            validInputs.forEach(input => expect(assert.isBigNumber.bind(assert, variableName, input)).to.not.throw());
 | 
						|
        });
 | 
						|
        it('should throw for invalid input', () => {
 | 
						|
            const invalidInputs = [
 | 
						|
                'test',
 | 
						|
                42,
 | 
						|
                false,
 | 
						|
                { random: 'test' },
 | 
						|
                undefined,
 | 
						|
            ];
 | 
						|
            invalidInputs.forEach(input => expect(assert.isBigNumber.bind(assert, variableName, input)).to.throw());
 | 
						|
        });
 | 
						|
    });
 | 
						|
    describe('#isUndefined', () => {
 | 
						|
        it('should not throw for valid input', () => {
 | 
						|
            const validInputs = [
 | 
						|
                undefined,
 | 
						|
            ];
 | 
						|
            validInputs.forEach(input => expect(assert.isUndefined.bind(assert, input, variableName)).to.not.throw());
 | 
						|
        });
 | 
						|
        it('should throw for invalid input', () => {
 | 
						|
            const invalidInputs = [
 | 
						|
                'test',
 | 
						|
                42,
 | 
						|
                false,
 | 
						|
                { random: 'test' },
 | 
						|
            ];
 | 
						|
            invalidInputs.forEach(input => expect(assert.isUndefined.bind(assert, input, variableName)).to.throw());
 | 
						|
        });
 | 
						|
    });
 | 
						|
    describe('#isString', () => {
 | 
						|
        it('should not throw for valid input', () => {
 | 
						|
            const validInputs = [
 | 
						|
                'hello',
 | 
						|
                'goodbye',
 | 
						|
            ];
 | 
						|
            validInputs.forEach(input => expect(assert.isString.bind(assert, variableName, input)).to.not.throw());
 | 
						|
        });
 | 
						|
        it('should throw for invalid input', () => {
 | 
						|
            const invalidInputs = [
 | 
						|
                42,
 | 
						|
                false,
 | 
						|
                { random: 'test' },
 | 
						|
                undefined,
 | 
						|
                new BigNumber(45),
 | 
						|
            ];
 | 
						|
            invalidInputs.forEach(input => expect(assert.isString.bind(assert, variableName, input)).to.throw());
 | 
						|
        });
 | 
						|
    });
 | 
						|
    describe('#isFunction', () => {
 | 
						|
        it('should not throw for valid input', () => {
 | 
						|
            const validInputs = [
 | 
						|
                BigNumber,
 | 
						|
                assert.isString.bind(this),
 | 
						|
            ];
 | 
						|
            validInputs.forEach(input => expect(assert.isFunction.bind(assert, variableName, input)).to.not.throw());
 | 
						|
        });
 | 
						|
        it('should throw for invalid input', () => {
 | 
						|
            const invalidInputs = [
 | 
						|
                42,
 | 
						|
                false,
 | 
						|
                { random: 'test' },
 | 
						|
                undefined,
 | 
						|
                new BigNumber(45),
 | 
						|
            ];
 | 
						|
            invalidInputs.forEach(input => expect(assert.isFunction.bind(assert, variableName, input)).to.throw());
 | 
						|
        });
 | 
						|
    });
 | 
						|
    describe('#isHexString', () => {
 | 
						|
        it('should not throw for valid input', () => {
 | 
						|
            const validInputs = [
 | 
						|
                '0x61a3ed31B43c8780e905a260a35faefEc527be7516aa11c0256729b5b351bc33',
 | 
						|
                '0x40349190569279751135161d22529dc25add4f6069af05be04cacbda2ace2254',
 | 
						|
            ];
 | 
						|
            validInputs.forEach(input => expect(assert.isHexString.bind(assert, variableName, input)).to.not.throw());
 | 
						|
        });
 | 
						|
        it('should throw for invalid input', () => {
 | 
						|
            const invalidInputs = [
 | 
						|
                42,
 | 
						|
                false,
 | 
						|
                { random: 'test' },
 | 
						|
                undefined,
 | 
						|
                new BigNumber(45),
 | 
						|
                '0x61a3ed31B43c8780e905a260a35faYfEc527be7516aa11c0256729b5b351bc33',
 | 
						|
            ];
 | 
						|
            invalidInputs.forEach(input => expect(assert.isHexString.bind(assert, variableName, input)).to.throw());
 | 
						|
        });
 | 
						|
    });
 | 
						|
    describe('#isETHAddressHex', () => {
 | 
						|
        it('should not throw for valid input', () => {
 | 
						|
            const validInputs = [
 | 
						|
                '0x0000000000000000000000000000000000000000',
 | 
						|
                '0x6fffd0ae3f7d88c9b4925323f54c6e4b2918c5fd',
 | 
						|
                '0x12459c951127e0c374ff9105dda097662a027093',
 | 
						|
            ];
 | 
						|
            validInputs.forEach(input =>
 | 
						|
                expect(assert.isETHAddressHex.bind(assert, variableName, input)).to.not.throw(),
 | 
						|
            );
 | 
						|
        });
 | 
						|
        it('should throw for invalid input', () => {
 | 
						|
            const invalidInputs = [
 | 
						|
                42,
 | 
						|
                false,
 | 
						|
                { random: 'test' },
 | 
						|
                undefined,
 | 
						|
                new BigNumber(45),
 | 
						|
                '0x6FFFd0ae3f7d88c9b4925323f54c6e4b2918c5fd',
 | 
						|
                '0x6FFFd0ae3f7d88c9b4925323f54c6e4',
 | 
						|
            ];
 | 
						|
            invalidInputs.forEach(input =>
 | 
						|
                expect(assert.isETHAddressHex.bind(assert, variableName, input)).to.throw(),
 | 
						|
            );
 | 
						|
        });
 | 
						|
    });
 | 
						|
    describe('#doesBelongToStringEnum', () => {
 | 
						|
        enum TestEnums {
 | 
						|
            Test1 = 'Test1',
 | 
						|
            Test2 = 'Test2',
 | 
						|
        }
 | 
						|
        it('should not throw for valid input', () => {
 | 
						|
            const validInputs = [
 | 
						|
                TestEnums.Test1,
 | 
						|
                TestEnums.Test2,
 | 
						|
            ];
 | 
						|
            validInputs.forEach(input =>
 | 
						|
                expect(assert.doesBelongToStringEnum.bind(assert, variableName, input, TestEnums)).to.not.throw(),
 | 
						|
            );
 | 
						|
        });
 | 
						|
        it('should throw for invalid input', () => {
 | 
						|
            const invalidInputs = [
 | 
						|
                42,
 | 
						|
                false,
 | 
						|
                { random: 'test' },
 | 
						|
                undefined,
 | 
						|
                new BigNumber(45),
 | 
						|
            ];
 | 
						|
            invalidInputs.forEach(input =>
 | 
						|
                expect(assert.doesBelongToStringEnum.bind(assert, variableName, input, TestEnums)).to.throw(),
 | 
						|
            );
 | 
						|
        });
 | 
						|
    });
 | 
						|
    describe('#hasAtMostOneUniqueValue', () => {
 | 
						|
        const errorMsg = 'more than one unique value';
 | 
						|
        it('should not throw for valid input', () => {
 | 
						|
            const validInputs = [
 | 
						|
                ['hello'],
 | 
						|
                ['goodbye', 'goodbye', 'goodbye'],
 | 
						|
            ];
 | 
						|
            validInputs.forEach(input =>
 | 
						|
                expect(assert.hasAtMostOneUniqueValue.bind(assert, input, errorMsg)).to.not.throw(),
 | 
						|
            );
 | 
						|
        });
 | 
						|
        it('should throw for invalid input', () => {
 | 
						|
            const invalidInputs = [
 | 
						|
                ['hello', 'goodbye'],
 | 
						|
                ['goodbye', 42, false, false],
 | 
						|
            ];
 | 
						|
            invalidInputs.forEach(input =>
 | 
						|
                expect(assert.hasAtMostOneUniqueValue.bind(assert, input, errorMsg)).to.throw(),
 | 
						|
            );
 | 
						|
        });
 | 
						|
    });
 | 
						|
    describe('#isNumber', () => {
 | 
						|
        it('should not throw for valid input', () => {
 | 
						|
            const validInputs = [
 | 
						|
                42,
 | 
						|
                0.00,
 | 
						|
                21e+42,
 | 
						|
            ];
 | 
						|
            validInputs.forEach(input => expect(assert.isNumber.bind(assert, variableName, input)).to.not.throw());
 | 
						|
        });
 | 
						|
        it('should throw for invalid input', () => {
 | 
						|
            const invalidInputs = [
 | 
						|
                false,
 | 
						|
                { random: 'test' },
 | 
						|
                undefined,
 | 
						|
                new BigNumber(45),
 | 
						|
            ];
 | 
						|
            invalidInputs.forEach(input => expect(assert.isNumber.bind(assert, variableName, input)).to.throw());
 | 
						|
        });
 | 
						|
    });
 | 
						|
    describe('#isBoolean', () => {
 | 
						|
        it('should not throw for valid input', () => {
 | 
						|
            const validInputs = [
 | 
						|
                true,
 | 
						|
                false,
 | 
						|
            ];
 | 
						|
            validInputs.forEach(input => expect(assert.isBoolean.bind(assert, variableName, input)).to.not.throw());
 | 
						|
        });
 | 
						|
        it('should throw for invalid input', () => {
 | 
						|
            const invalidInputs = [
 | 
						|
                42,
 | 
						|
                { random: 'test' },
 | 
						|
                undefined,
 | 
						|
                new BigNumber(45),
 | 
						|
            ];
 | 
						|
            invalidInputs.forEach(input => expect(assert.isBoolean.bind(assert, variableName, input)).to.throw());
 | 
						|
        });
 | 
						|
    });
 | 
						|
    describe('#isWeb3Provider', () => {
 | 
						|
        it('should not throw for valid input', () => {
 | 
						|
            const validInputs = [
 | 
						|
                { send: () => 45 },
 | 
						|
                { sendAsync: () => 45 },
 | 
						|
            ];
 | 
						|
            validInputs.forEach(input =>
 | 
						|
                expect(assert.isWeb3Provider.bind(assert, variableName, input)).to.not.throw(),
 | 
						|
            );
 | 
						|
        });
 | 
						|
        it('should throw for invalid input', () => {
 | 
						|
            const invalidInputs = [
 | 
						|
                42,
 | 
						|
                { random: 'test' },
 | 
						|
                undefined,
 | 
						|
                new BigNumber(45),
 | 
						|
            ];
 | 
						|
            invalidInputs.forEach(input =>
 | 
						|
                expect(assert.isWeb3Provider.bind(assert, variableName, input)).to.throw(),
 | 
						|
            );
 | 
						|
        });
 | 
						|
    });
 | 
						|
    describe('#doesConformToSchema', () => {
 | 
						|
        const schema = schemas.addressSchema;
 | 
						|
        it('should not throw for valid input', () => {
 | 
						|
            const validInputs = [
 | 
						|
                '0x6fffd0ae3f7d88c9b4925323f54c6e4b2918c5fd',
 | 
						|
                '0x12459c951127e0c374ff9105dda097662a027093',
 | 
						|
            ];
 | 
						|
            validInputs.forEach(input =>
 | 
						|
                expect(assert.doesConformToSchema.bind(assert, variableName, input, schema)).to.not.throw(),
 | 
						|
            );
 | 
						|
        });
 | 
						|
        it('should throw for invalid input', () => {
 | 
						|
            const invalidInputs = [
 | 
						|
                42,
 | 
						|
                { random: 'test' },
 | 
						|
                undefined,
 | 
						|
                new BigNumber(45),
 | 
						|
            ];
 | 
						|
            invalidInputs.forEach(input =>
 | 
						|
                expect(assert.doesConformToSchema.bind(assert, variableName, input, schema)).to.throw(),
 | 
						|
            );
 | 
						|
        });
 | 
						|
    });
 | 
						|
    describe('#isHttpUrl', () => {
 | 
						|
        it('should not throw for valid input', () => {
 | 
						|
            const validInputs = [
 | 
						|
                'http://www.google.com',
 | 
						|
                'https://api.example-relayer.net',
 | 
						|
                'https://api.radarrelay.com/0x/v0/',
 | 
						|
                'https://zeroex.beta.radarrelay.com:8000/0x/v0/',
 | 
						|
            ];
 | 
						|
            validInputs.forEach(input =>
 | 
						|
                expect(assert.isHttpUrl.bind(assert, variableName, input)).to.not.throw(),
 | 
						|
            );
 | 
						|
        });
 | 
						|
        it('should throw for invalid input', () => {
 | 
						|
            const invalidInputs = [
 | 
						|
                42,
 | 
						|
                { random: 'test' },
 | 
						|
                undefined,
 | 
						|
                new BigNumber(45),
 | 
						|
                'ws://www.api.example-relayer.net',
 | 
						|
                'www.google.com',
 | 
						|
                'api.example-relayer.net',
 | 
						|
                'user:password@api.example-relayer.net',
 | 
						|
                '//api.example-relayer.net',
 | 
						|
            ];
 | 
						|
            invalidInputs.forEach(input =>
 | 
						|
                expect(assert.isHttpUrl.bind(assert, variableName, input)).to.throw(),
 | 
						|
            );
 | 
						|
        });
 | 
						|
    });
 | 
						|
    describe('#isUri', () => {
 | 
						|
        it('should not throw for valid input', () => {
 | 
						|
            const validInputs = [
 | 
						|
                'http://www.google.com',
 | 
						|
                'https://api.example-relayer.net',
 | 
						|
                'https://api.radarrelay.com/0x/v0/',
 | 
						|
                'https://zeroex.beta.radarrelay.com:8000/0x/v0/',
 | 
						|
                'ws://www.api.example-relayer.net',
 | 
						|
                'wss://www.api.example-relayer.net',
 | 
						|
                'user:password@api.example-relayer.net',
 | 
						|
            ];
 | 
						|
            validInputs.forEach(input =>
 | 
						|
                expect(assert.isUri.bind(assert, variableName, input)).to.not.throw(),
 | 
						|
            );
 | 
						|
        });
 | 
						|
        it('should throw for invalid input', () => {
 | 
						|
            const invalidInputs = [
 | 
						|
                42,
 | 
						|
                { random: 'test' },
 | 
						|
                undefined,
 | 
						|
                new BigNumber(45),
 | 
						|
                'www.google.com',
 | 
						|
                'api.example-relayer.net',
 | 
						|
                '//api.example-relayer.net',
 | 
						|
            ];
 | 
						|
            invalidInputs.forEach(input =>
 | 
						|
                expect(assert.isUri.bind(assert, variableName, input)).to.throw(),
 | 
						|
            );
 | 
						|
        });
 | 
						|
    });
 | 
						|
    describe('#assert', () => {
 | 
						|
        const assertMessage = 'assert not satisfied';
 | 
						|
        it('should not throw for valid input', () => {
 | 
						|
            expect(assert.assert.bind(assert, true, assertMessage)).to.not.throw();
 | 
						|
        });
 | 
						|
        it('should throw for invalid input', () => {
 | 
						|
            expect(assert.assert.bind(assert, false, assertMessage)).to.throw();
 | 
						|
        });
 | 
						|
    });
 | 
						|
    describe('#typeAssertionMessage', () => {
 | 
						|
        it('should render correct message', () => {
 | 
						|
            expect(assert.typeAssertionMessage('variable', 'string', 'number'))
 | 
						|
            .to.equal(`Expected variable to be of type string, encountered: number`);
 | 
						|
        });
 | 
						|
    });
 | 
						|
});
 |