package Ġnl . kn aw . h uc . di . rd . tag . tag ml . lsp Ċ Ċ import Ġorg . apache . commons . lang 3 . time . Stop Watch Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . eclipse . lsp 4 j .* Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . time . Experimental Time Ċ Ċ class ĠTAG ML TextDocument Service Test Ġ{ Ċ Ċ // ĠĠĠ Ġ@ Nested Ċ // ĠĠĠ Ġinner Ġclass ĠTest Symbol Reference Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġ@ Test Ċ // ĠĠĠĠĠĠĠ Ġfun Ġwith _ correct _ tag ml () Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠTest Client Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( td s , Ġuri ) Ġ= Ġopen TAG ML ( client , Ġ"[ tag > text < tag ]") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Document Ġ= ĠVersion ed TextDocument Identifier ( uri , Ġ 1 ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Symbol Params Ġ= ĠDocument Symbol Params ( text Document ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocations Ġ= Ġt ds . document Symbol ( document Symbol Params ). join () Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Time ĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠTest Definition Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġwith _ correct _ tag ml () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠTest Client ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( td s , Ġuri ) Ġ= Ġopen TAG ML ( client , Ġ"[ tag > text < tag ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Document Ġ= ĠVersion ed TextDocument Identifier ( uri , Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition In Start Tag Ġ= ĠPosition ( 0 , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartPosition Params Ġ= ĠText Document Position Params ( text Document , Ġposition In Start Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocations Ġ= Ġt ds . definition ( start Position Params ). join () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition In End Tag Ġ= ĠPosition ( 0 , Ġ 1 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Position Params Ġ= ĠText Document Position Params ( text Document , Ġposition In End Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocations 2 Ġ= Ġt ds . definition ( end Position Params ). join () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( locations ). has Size ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( locations 2 ). isEqualTo ( locations ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( locations [ 0 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( uri ). isEqualTo ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( this . range ). isEqualTo ( range ( 0 , Ġ 0 , Ġ 0 , Ġ 5 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( locations [ 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( uri ). isEqualTo ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( this . range ). isEqualTo ( range ( 0 , Ġ 9 , Ġ 0 , Ġ 1 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrange ( start Line : ĠInt , Ġstart Char : ĠInt , Ġend Line : ĠInt , Ġend Char : ĠInt ): ĠRange Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRange ( Position ( start Line , Ġstart Char ), ĠPosition ( end Line , Ġend Char )) ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠTest Did Open Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġwith _ correct _ TAG ML () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠTest Client ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen TAG ML ( client , Ġ"[ tag > text < tag ]") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiagnostics Ġ= Ġclient . read Diagnostics () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( diagnostics ). has Size ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġwith _ un pars able _ TAG ML () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠTest Client ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Did Open ( client , Ġ"[ [ does Ġnot Ġparse ! ]] ]") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiagnostics Ġ= Ġclient . read Diagnostics () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( diagnostics ). has Size GreaterThan ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Diagnostic Ġ= Ġdiagnostics [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( first Diagnostic . severity ). isEqualTo ( Diagnostic Severity . Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( first Diagnostic ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġwith _ incorrect _ TAG ML () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠTest Client ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Did Open ( client , Ġ"[ a > text < b ]") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiagnostics Ġ= Ġclient . read Diagnostics () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( diagnostics ). has Size ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Diagnostic Ġ= Ġdiagnostics [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( first Diagnostic . severity ). isEqualTo ( Diagnostic Severity . Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( first Diagnostic ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdo Did Open ( client : ĠTest Client , Ġtag ml : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt ds Ġ= Ġstart TD S ( client ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠDid Open TextDocument Params ( TextDocument Item (" uri ", Ġ" tag ml ", Ġ 1 , Ġtag ml )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt ds . did Open ( params ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwaitFor Diagnostics ToBe Published ( client ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠTest DidChange Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġtest DidChange () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠTest Client ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( td s , Ġuri ) Ġ= Ġopen TAG ML ( client , Ġ"[ tag > text < tag ]") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Document Ġ= ĠVersion ed TextDocument Identifier ( uri , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Changes Ġ= ĠlistOf ( TextDocument Content ChangeEvent (" [[ [ throw Ġme Ġan Ġerror ! ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchange Params Ġ= ĠDid Change TextDocument Params ( text Document , Ġcontent Changes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt ds . did Change ( change Params ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwaitFor Diagnostics ToBe Published ( client ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiagnostics Ġ= Ġclient . read Diagnostics () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( diagnostics ). has Size GreaterThan ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Diagnostic Ġ= Ġdiagnostics [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( first Diagnostic . severity ). isEqualTo ( Diagnostic Severity . Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( first Diagnostic ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen TAG ML ( client : ĠTest Client , Ġtag ml : ĠString ): ĠPair < TAG ML TextDocument Service , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt ds Ġ= Ġstart TD S ( client ) ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġ" file :/// tmp / test . tag ml " ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠDid Open TextDocument Params ( TextDocument Item ( uri , Ġ" tag ml ", Ġ 1 , Ġtag ml )) ĊĠĠĠĠĠĠĠ Ġt ds . did Open ( params ) ĊĠĠĠĠĠĠĠ ĠwaitFor Diagnostics ToBe Published ( client ) ĊĊĠĠĠĠĠĠĠ Ġval Ġopen Diagnostics Ġ= Ġclient . read Diagnostics () ĊĠĠĠĠĠĠĠ ĠassertThat ( open Diagnostics ). has Size ( 0 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( td s , Ġuri ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart TD S ( client : ĠTest Client ): ĠTAG ML TextDocument Service Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġls Ġ= ĠTAG ML Language Server ĊĠĠĠĠĠĠĠ Ġls . client Ġ= Ġclient ĊĠĠĠĠĠĠĠ Ġval Ġip Ġ= ĠInitialize Params () ĊĠĠĠĠĠĠĠ Ġls . initialize ( ip ). join () ĊĠĠĠĠĠĠĠ Ġreturn ĠTAG ML TextDocument Service ( ls ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠwaitFor Diagnostics ToBe Published ( client : ĠTest Client ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( client . publish Diagnostics Params Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlog Time Sp ent ( sw : ĠStop Watch , Ġs : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ("$ s Ġtook Ġ${ sw . getTime ( TimeUnit . MILLISECONDS )} Ġms ") ĊĠĠĠĠĠĠĠ Ġsw . reset () ĊĠĠĠĠĠĠĠ Ġsw . start () ĊĠĠĠ Ġ} Ċ Ċ }