import 'mocha'; import { expect } from 'chai'; import { FunctionParameterCollection } from '@/application/Parser/Script/Compiler/Function/Parameter/FunctionParameterCollection'; import { FunctionParameterStub } from '@tests/unit/stubs/FunctionParameterStub'; describe('FunctionParameterCollection', () => { it('all returns added parameters as expected', () => { // arrange const expected = [ new FunctionParameterStub().withName('1'), new FunctionParameterStub().withName('2').withOptionality(true), new FunctionParameterStub().withName('3').withOptionality(false), ]; const sut = new FunctionParameterCollection(); for (const parameter of expected) { sut.addParameter(parameter); } // act const actual = sut.all; // assert expect(expected).to.deep.equal(actual); }); it('throws when function parameters have same names', () => { // arrange const parameterName = 'duplicate-parameter'; const expectedError = `duplicate parameter name: "${parameterName}"`; const sut = new FunctionParameterCollection(); sut.addParameter(new FunctionParameterStub().withName(parameterName)); // act const act = () => sut.addParameter(new FunctionParameterStub().withName(parameterName)); // assert expect(act).to.throw(expectedError); }); describe('addParameter', () => { it('throws if parameter is undefined', () => { // arrange const expectedError = 'undefined parameter'; const value = undefined; const sut = new FunctionParameterCollection(); // act const act = () => sut.addParameter(value); // assert expect(act).to.throw(expectedError); }); }); });