package Ġcom . av ito . test . http Ċ Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġokhttp 3 . mock webserver . Mock Response Ċ import Ġorg . junit . jupiter . api . Disabled Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ internal Ġclass ĠMock Dispatcher Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdispatcher Ġ= ĠMock Dispatcher () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` dispatcher Ġ- Ġdispatch Ġlast Ġmatching Ġresponse Ġ- Ġif Ġmultiple Ġregistered Ġconditions Ġmatches `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsame Request : ĠRequest Data . () Ġ-> ĠBoolean Ġ= Ġ{ Ġpath . contains (" xxx ") Ġ} ĊĊĠĠĠĠĠĠĠ Ġdispatcher . register Mock ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Matcher Ġ= Ġsame Request , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= ĠMock Response (). set Body (" First Ġregistered ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdispatcher . register Mock ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Matcher Ġ= Ġsame Request , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= ĠMock Response (). set Body (" Second Ġregistered ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġdispatcher . dispatch ( build Request ( path Ġ= Ġ" xxx ")) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( response . getBody ()?. read Utf 8 ()). isEqualTo (" Second Ġregistered ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` dispatcher Ġ- Ġfind Ġmatching Ġrequest Ġ- Ġif Ġmultiple Ġregistered Ġrequest Ġhas Ġsame Ġpath Ġbut Ġdifferent Ġbody `() Ġ{ ĊĠĠĠĠĠĠĠ Ġdispatcher . register Mock ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Matcher Ġ= Ġ{ Ġpath . contains (" xxx ") Ġ&& Ġbody . contains (" param 1 4 8 5 ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= ĠMock Response (). set Body (" First Ġregistered ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdispatcher . register Mock ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Matcher Ġ= Ġ{ Ġpath . contains (" xxx ") Ġ&& Ġbody . contains (" category 8 9 ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= ĠMock Response (). set Body (" Second Ġregistered ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġdispatcher . dispatch ( build Request ( path Ġ= Ġ" xxx ", Ġbody Ġ= Ġ" param 1 4 8 5 ")) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( response . getBody ()?. read Utf 8 ()). isEqualTo (" First Ġregistered ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` dispatcher Ġ- Ġcaptures Ġrequest Ġ- Ġalso Ġsending Ġresponse `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġdispatcher . capture Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Matcher Ġ= Ġ{ Ġpath . contains (" xxx ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= ĠMock Response (). set Response Code ( 2 0 0 ). set Body (" Capt urer Ġresponse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġdispatcher . dispatch ( build Request ( path Ġ= Ġ" xxx ", Ġbody Ġ= Ġ" 2 2 2 2 ")) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( response . getBody ()?. read Utf 8 ()). isEqualTo (" Capt urer Ġresponse ") ĊĠĠĠĠĠĠĠ Ġrequest . checks . single Request Capt ured (). body Contains (" 2 2 2 2 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRun Ġwith Ġ" Repeat : ĠUnt il Ġfailure " Ġoption Ġin ĠIDEA Ġrun Ġconfiguration ĊĠĠĠĠ Ġ* Ġsee ĠMB S - 7 6 3 6 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Disabled (" Used Ġonly Ġfor Ġmanual Ġdebugging Ġof Ġconcurrency Ġproblems Ġon Ġdispatcher Ġinternal Ġcollections ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` dispatcher Ġ- Ġregister Ġand Ġdispatch ing Ġmocks Ġ- Ġaccessed Ġconcurrent ly `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġthrowable : ĠThrowable ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġregisters Ġ= ĠThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher . register Mock ( Mock ({ Ġtrue Ġ}, ĠMock Response (), Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdispatch ers Ġ= ĠThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher . dispatch ( build Request ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġregisters . start () ĊĠĠĠĠĠĠĠ Ġdispatch ers . start () ĊĊĠĠĠĠĠĠĠ Ġregisters . join () ĊĠĠĠĠĠĠĠ Ġdispatch ers . join () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( throwable ). isNull () ĊĠĠĠ Ġ} Ċ } Ċ