import 'mocha' ; import { expect } from 'chai' ; import { FunctionCall } from '@/application/Parser/Script/Compiler/Function/Call/FunctionCall' ; import { IReadOnlyFunctionCallArgumentCollection } from '@/application/Parser/Script/Compiler/Function/Call/Argument/IFunctionCallArgumentCollection' ; import { FunctionCallArgumentCollectionStub } from '@tests/unit/stubs/FunctionCallArgumentCollectionStub' ; describe ( 'FunctionCall' , ( ) => { describe ( 'ctor' , ( ) => { describe ( 'args' , ( ) => { it ( 'throws when args is undefined' , ( ) => { const expectedError = 'undefined args' ; const args = undefined ; const act = ( ) => new FunctionCallBuilder ( ) . withArgs ( args ) . build ( ) ; expect ( act ) . to . throw ( expectedError ) ; } ) ; it ( 'sets args as expected' , ( ) => { const expected = new FunctionCallArgumentCollectionStub ( ) . withArgument ( 'testParameter' , 'testValue' ) ; const sut = new FunctionCallBuilder ( ) . withArgs ( expected ) . build ( ) ; expect ( sut . args ) . to . deep . equal ( expected ) ; } ) ; } ) ; describe ( 'functionName' , ( ) => { it ( 'throws when function name is undefined' , ( ) => { const expectedError = 'empty function name in function call' ; const functionName = undefined ; const act = ( ) => new FunctionCallBuilder ( ) . withFunctionName ( functionName ) . build ( ) ; expect ( act ) . to . throw ( expectedError ) ; } ) ; it ( 'sets function name as expected' , ( ) => { const expected = 'expectedFunctionName' ; const sut = new FunctionCallBuilder ( ) . withFunctionName ( expected ) . build ( ) ; expect ( sut . functionName ) . to . equal ( expected ) ; } ) ; } ) ; } ) ; } ) ; class FunctionCallBuilder { private functionName = 'functionName' ; private args : IReadOnlyFunctionCallArgumentCollection = new FunctionCallArgumentCollectionStub ( ) ; public withFunctionName ( functionName ) { this . functionName = functionName ; return this ; } public withArgs ( args ) { this . args = args ; return this ; } public build ( ) { return new FunctionCall ( this . functionName , this . args ) ; } }