package Ġast miner . parse . antlr . python Ċ Ċ import Ġast miner . common . model . En closing ElementType Ċ import Ġast miner . common . model . Function Info Ċ import Ġast miner . parse . antlr . Ant lr Node Ċ import Ġorg . junit . Test Ċ import Ġjava . io . File Ċ import Ġkotlin . test . Before Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertNull Ċ Ċ class ĠPython Function Splitter Test Ġ{ ĊĊĠĠĠ Ġvar Ġfunction Infos : ĠCollection < Function Info < Ant lr Node >> Ġ= ĠlistOf () ĊĊĠĠĠ Ġ@ Before Test ĊĠĠĠ Ġfun Ġparse Tree () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Tree Ġ= Ġparser . parse InputStream ( File ( FILE _ PATH ). inputStream ()) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( test Tree ) ĊĠĠĠĠĠĠĠ Ġfunction Infos Ġ= Ġfunction Splitter . split Into Functions ( test Tree , ĠFILE _ PATH ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Valid Split ting () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( N _ FUNCTION S , Ġfunction Infos . size , Ġ" Test Ġfile Ġcontains Ġ$ N _ FUNCTION S Ġmethods ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Function NotIn Class () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunction Class Ġ= Ġfunction Infos . find Ġ{ Ġit . name Ġ== Ġ" fun _ with _ no _ class " Ġ} ĊĠĠĠĠĠĠĠ ĠassertNotNull ( function Class ) ĊĠĠĠĠĠĠĠ ĠassertNull ( function Class . enc lo sing Element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Function In Class () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunction Class Ġ= Ġfunction Infos . find Ġ{ Ġit . name Ġ== Ġ" fun _ in _ class 1 " Ġ} ĊĠĠĠĠĠĠĠ ĠassertNotNull ( function Class ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( En closing ElementType . Class , Ġfunction Class . enc lo sing Element ?. type ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Class 1 ", Ġfunction Class . enc lo sing Element ?. name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Function In Nested Class () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunction Class Ġ= Ġfunction Infos . find Ġ{ Ġit . name Ġ== Ġ" fun _ in _ class 2 " Ġ} ĊĠĠĠĠĠĠĠ ĠassertNotNull ( function Class ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( En closing ElementType . Class , Ġfunction Class . enc lo sing Element ?. type ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Class 2 ", Ġfunction Class . enc lo sing Element ?. name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest No Parameters () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunction No Parameters Ġ= Ġfunction Infos . find Ġ{ Ġit . name Ġ== Ġ" function _ with _ no _ parameters " Ġ} ĊĠĠĠĠĠĠĠ ĠassertNotNull ( function No Parameters ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġfunction No Parameters . parameters ?. size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest One Parameter () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunction One Parameter Ġ= Ġfunction Infos . find Ġ{ Ġit . name Ġ== Ġ" function _ with _ one _ parameter " Ġ} ĊĠĠĠĠĠĠĠ ĠassertNotNull ( function One Parameter ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġfunction One Parameter . parameters ?. size ) ĊĠĠĠĠĠĠĠ Ġval Ġparameter Ġ= Ġfunction One Parameter . parameters ?. get ( 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" p 1 ", Ġparameter ?. name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest One Typed Parameter () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunction One Typed Parameter Ġ= Ġfunction Infos . find Ġ{ Ġit . name Ġ== Ġ" function _ with _ one _ typed _ parameter " Ġ} ĊĠĠĠĠĠĠĠ ĠassertNotNull ( function One Typed Parameter ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġfunction One Typed Parameter . parameters ?. size ) ĊĠĠĠĠĠĠĠ Ġval Ġparameter Ġ= Ġfunction One Typed Parameter . parameters ?. get ( 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" p 1 ", Ġparameter ?. name ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" int ", Ġparameter ?. type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfunction With Complex Parameter () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunction One Typed Parameter Ġ= Ġfunction Infos . find Ġ{ Ġit . name Ġ== Ġ" function _ with _ complex _ parameter " Ġ} ĊĠĠĠĠĠĠĠ ĠassertNotNull ( function One Typed Parameter ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġfunction One Typed Parameter . parameters ?. size ) ĊĠĠĠĠĠĠĠ Ġval Ġparameter Ġ= Ġfunction One Typed Parameter . parameters ?. get ( 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" p 1 ", Ġparameter ?. name ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" List [ int ]", Ġparameter ?. type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Three Parameters () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunction Three Parameters Ġ= Ġfunction Infos . find Ġ{ Ġit . name Ġ== Ġ" function _ with _ three _ parameters " Ġ} ĊĠĠĠĠĠĠĠ ĠassertNotNull ( function Three Parameters ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġfunction Three Parameters . parameters ?. size ) ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġfunction Three Parameters . parameters !! ĊĠĠĠĠĠĠĠ ĠassertEquals (" p 1 ", Ġparameters [ 0 ]. name ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" p 2 ", Ġparameters [ 1 ]. name ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" p 3 ", Ġparameters [ 2 ]. name ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" int ", Ġparameters [ 2 ]. type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Parameter In Class () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunction One Parameter Ġ= Ġfunction Infos . find Ġ{ Ġit . name Ġ== Ġ" fun _ with _ parameter _ in _ class " Ġ} ĊĠĠĠĠĠĠĠ ĠassertNotNull ( function One Parameter ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġfunction One Parameter . parameters ?. size ) ĊĠĠĠĠĠĠĠ Ġval Ġparameter Ġ= Ġfunction One Parameter . parameters ?. get ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" p 1 ", Ġparameter ?. name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Typed Parameter In Class () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunction One Typed Parameter Ġ= Ġfunction Infos . find Ġ{ Ġit . name Ġ== Ġ" fun _ with _ typed _ parameter _ in _ class " Ġ} ĊĠĠĠĠĠĠĠ ĠassertNotNull ( function One Typed Parameter ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġfunction One Typed Parameter . parameters ?. size ) ĊĠĠĠĠĠĠĠ Ġval Ġparameter Ġ= Ġfunction One Typed Parameter . parameters ?. get ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" p 1 ", Ġparameter ?. name ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" int ", Ġparameter ?. type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest En closing Function () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunction Inside Function Ġ= Ġfunction Infos . find Ġ{ Ġit . name Ġ== Ġ" function _ inside _ function " Ġ} ĊĠĠĠĠĠĠĠ ĠassertNotNull ( function Inside Function ) ĊĠĠĠĠĠĠĠ Ġval Ġen closing Element Ġ= Ġfunction Inside Function . enc lo sing Element ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( enc lo sing Element ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" function _ containing _ function ", Ġen closing Element . name ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( En closing ElementType . Function , Ġen closing Element . type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest En closing Method () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunction Inside Method Ġ= Ġfunction Infos . find Ġ{ Ġit . name Ġ== Ġ" function _ inside _ method " Ġ} ĊĠĠĠĠĠĠĠ ĠassertNotNull ( function Inside Method ) ĊĠĠĠĠĠĠĠ Ġval Ġen closing Element Ġ= Ġfunction Inside Method . enc lo sing Element ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( enc lo sing Element ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" some _ method ", Ġen closing Element . name ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( En closing ElementType . Method , Ġen closing Element . type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest En closing Function Inside Method () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfun Inside Fun Inside Method Ġ= Ġfunction Infos . find Ġ{ Ġit . name Ġ== Ġ" fun _ inside _ fun _ inside _ method " Ġ} ĊĠĠĠĠĠĠĠ ĠassertNotNull ( fun Inside Fun Inside Method ) ĊĠĠĠĠĠĠĠ Ġval Ġen closing Element Ġ= Ġfun Inside Fun Inside Method . enc lo sing Element ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( enc lo sing Element ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" second _ function _ inside _ method ", Ġen closing Element . name ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( En closing ElementType . Function , Ġen closing Element . type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFILE _ PATH Ġ= Ġ" src / test / resources / method Split ting / test Method Split ting . py " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠN _ FUNCTION S Ġ= Ġ 1 7 ĊĠĠĠĠĠĠĠ Ġval Ġfunction Splitter Ġ= ĠPython Function Splitter () ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠPython Parser () ĊĠĠĠ Ġ} Ċ } Ċ