package Ġorg . lex em . ang mar . analyzer . nodes . literals Ċ Ċ import Ġorg . junit . jupiter . api .* Ċ import Ġorg . lex em . ang mar .* Ċ import Ġorg . lex em . ang mar . analyzer .* Ċ import Ġorg . lex em . ang mar . analyzer . data . primitives .* Ċ import Ġorg . lex em . ang mar . errors .* Ċ import Ġorg . lex em . ang mar . parser . commons .* Ċ import Ġorg . lex em . ang mar . parser . literals .* Ċ import Ġorg . lex em . ang mar . utils .* Ċ Ċ internal Ġclass ĠFunction Parameter Analyzer Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġwithout Ġexpression `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparameter Name Ġ= Ġ" id " ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġparameter Name ĊĠĠĠĠĠĠĠ Ġval Ġanalyzer Ġ= ĠTestUtils . create Analyzer From ( text , Ġparser Function Ġ= ĠFunction Parameter Node . Companion :: parse ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPrepare Ġstack . ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= ĠL xm Parameters () ĊĠĠĠĠĠĠĠ Ġanalyzer . memory . addTo Stack ( Analyzer Common s . Identifiers . Parameters , Ġparameters ) ĊĊĠĠĠĠĠĠĠ ĠTestUtils . process And Check Empty ( analyzer ) ĊĊĠĠĠĠĠĠĠ Ġval Ġparameter List Ġ= Ġparameters . getParameters () ĊĠĠĠĠĠĠĠ ĠAssertions . assertNull ( parameters . named Spread , Ġ" The Ġnamed Spread Ġproperty Ġis Ġincorrect ") ĊĠĠĠĠĠĠĠ ĠAssertions . assertNull ( parameters . positional Spread , Ġ" The Ġpositional Spread Ġproperty Ġis Ġincorrect ") ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 1 , Ġparameter List . size , Ġ" The Ġnumber Ġof Ġparameters Ġis Ġincorrect ") ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( parameter Name , Ġparameter List [ 0 ], Ġ" The Ġfirst Ġparameter Ġis Ġincorrect ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠAnalyzer Common s . getCurrent Context ( analyzer . memory ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( L xm Nil , Ġcontext . getProperty Value ( analyzer . memory , Ġparameter Name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġresult Ġis Ġincorrect ") ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( parameters , Ġanalyzer . memory . get From Stack ( Analyzer Common s . Identifiers . Parameters ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġparameters Ġis Ġnot Ġsaved Ġagain ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠRemove ĠParameters Ġfrom Ġthe Ġstack . ĊĠĠĠĠĠĠĠ Ġanalyzer . memory . remove From Stack ( Analyzer Common s . Identifiers . Parameters ) ĊĊĠĠĠĠĠĠĠ ĠTestUtils . check Empty Stack And Context ( analyzer , ĠlistOf ( parameter Name )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġwith Ġexpression `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparameter Name Ġ= Ġ" id " ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= ĠL xm Integer . Num 1 0 ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ parameter Name Ġ${ Function Parameter Node . assign Operator } Ġ$ value " ĊĠĠĠĠĠĠĠ Ġval Ġanalyzer Ġ= ĠTestUtils . create Analyzer From ( text , Ġparser Function Ġ= ĠFunction Parameter Node . Companion :: parse ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPrepare Ġstack . ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= ĠL xm Parameters () ĊĠĠĠĠĠĠĠ Ġanalyzer . memory . addTo Stack ( Analyzer Common s . Identifiers . Parameters , Ġparameters ) ĊĊĠĠĠĠĠĠĠ ĠTestUtils . process And Check Empty ( analyzer ) ĊĊĠĠĠĠĠĠĠ Ġval Ġparameter List Ġ= Ġparameters . getParameters () ĊĠĠĠĠĠĠĠ ĠAssertions . assertNull ( parameters . named Spread , Ġ" The Ġnamed Spread Ġproperty Ġis Ġincorrect ") ĊĠĠĠĠĠĠĠ ĠAssertions . assertNull ( parameters . positional Spread , Ġ" The Ġpositional Spread Ġproperty Ġis Ġincorrect ") ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 1 , Ġparameter List . size , Ġ" The Ġnumber Ġof Ġparameters Ġis Ġincorrect ") ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( parameter Name , Ġparameter List [ 0 ], Ġ" The Ġfirst Ġparameter Ġis Ġincorrect ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠAnalyzer Common s . getCurrent Context ( analyzer . memory ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( value , Ġcontext . getProperty Value ( analyzer . memory , Ġparameter Name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġresult Ġis Ġincorrect ") ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( parameters , Ġanalyzer . memory . get From Stack ( Analyzer Common s . Identifiers . Parameters ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġparameters Ġis Ġnot Ġsaved Ġagain ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠRemove ĠParameters Ġfrom Ġthe Ġstack . ĊĠĠĠĠĠĠĠ Ġanalyzer . memory . remove From Stack ( Analyzer Common s . Identifiers . Parameters ) ĊĊĠĠĠĠĠĠĠ ĠTestUtils . check Empty Stack And Context ( analyzer , ĠlistOf ( parameter Name )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Incorrect ĊĠĠĠ Ġfun Ġ` test Ġincorrect Ġidentifier `() Ġ{ ĊĠĠĠĠĠĠĠ ĠTestUtils . assert Analyzer Exception ( Ang mar Analyzer Exception Type . In compatible Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"${ Esc aped Expression Node . start Token }${ Logic Node . true Literal }${ Esc aped Expression Node . end Token }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanalyzer Ġ= ĠTestUtils . create Analyzer From ( text , Ġparser Function Ġ= ĠFunction Parameter Node . Companion :: parse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠTestUtils . process And Check Empty ( analyzer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ