/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġandroidx . navigation . safe args . gradle Ċ Ċ import Ġorg . gradle . test kit . runner . Build Result Ċ import Ġorg . gradle . test kit . runner . Gradle Runner Ċ import Ġorg . gradle . test kit . runner . Task Outcome Ċ import Ġorg . hamcrest . Core Matchers .` is ` Ċ import Ġorg . hamcrest . Core Matchers . not Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . rules . Temporary Folder Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ import Ġjava . io . File Ċ import Ġjava . util . Properties Ċ Ċ private Ġconst Ġval ĠMAIN _ DIR Ġ= Ġ" android x / navigation / test app " Ċ Ċ private Ġconst Ġval ĠNEXT _ DIRECTION S Ġ= Ġ"$ MAIN _ DIR / Next Fragment Directions . java " Ċ private Ġconst Ġval ĠMAIN _ DIRECTION S Ġ= Ġ"$ MAIN _ DIR / Main Fragment Directions . java " Ċ private Ġconst Ġval ĠMO DI FIED _ NEXT _ DIRECTION S Ġ= Ġ"$ MAIN _ DIR / Modified Next Fragment Directions . java " Ċ private Ġconst Ġval ĠADD ITION AL _ DIRECTION S Ġ= Ġ"$ MAIN _ DIR / Additional Fragment Directions . java " Ċ private Ġconst Ġval ĠF OO _ DIRECTION S Ġ= Ġ" safe / gradle / test / app / foo / Foo Fragment Directions . java " Ċ Ċ private Ġconst Ġval ĠNAV _ RESOURCES Ġ= Ġ" src / main / res / navigation " Ċ private Ġconst Ġval ĠSE C Ġ= Ġ 1 0 0 0 L Ċ Ċ // ĠDoes Ġnot Ġwork Ġin Ġthe ĠAndroid ĠStudio Ċ @ RunWith ( JUnit 4 :: class ) Ċ class ĠPlugin Test Ġ{ ĊĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġtest Project Dir Ġ= ĠTemporary Folder () ĊĊĠĠĠ Ġprivate Ġvar Ġbuild File : ĠFile Ġ= ĠFile ("") ĊĠĠĠ Ġprivate Ġvar Ġcompile Sdk Version Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġbuild Tools Version Ġ= Ġ"" ĊĊĠĠĠ Ġprivate Ġfun Ġproject Root (): ĠFile Ġ= Ġtest Project Dir . root ĊĊĠĠĠ Ġprivate Ġfun Ġassert Generated ( name : ĠString ) Ġ= Ġassert Exists ( name , Ġtrue ) ĊĊĠĠĠ Ġprivate Ġfun Ġassert Not Generated ( name : ĠString ) Ġ= Ġassert Exists ( name , Ġfalse ) ĊĊĠĠĠ Ġprivate Ġfun Ġassert Exists ( name : ĠString , Ġex : ĠBoolean ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgenerated File Ġ= ĠFile ( project Root (), Ġ" build /$ GENERATED _ PATH /$ name ") ĊĠĠĠĠĠĠĠ ĠassertThat ( generated File . exists (), Ġ` is `( ex )) ĊĠĠĠĠĠĠĠ Ġreturn Ġgenerated File ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnav Resource ( name : ĠString ) Ġ= ĠFile ( project Root (), Ġ"$ NAV _ RESOURCES /$ name ") ĊĊĠĠĠ Ġprivate Ġfun Ġgradle Builder ( var arg Ġargs : ĠString ) Ġ= ĠGradle Runner . create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Project Dir ( project Root ()). with Plugin Classpath (). with Arguments (* args ) ĊĊĠĠĠ Ġprivate Ġfun Ġrun Gradle ( var arg Ġargs : ĠString ) Ġ= Ġgradle Builder (* args ). build () ĊĠĠĠ Ġprivate Ġfun Ġrun And Fail Gradle ( var arg Ġargs : ĠString ) Ġ= Ġgradle Builder (* args ). build And Fail () ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġproject Root (). mkdir s () ĊĠĠĠĠĠĠĠ Ġbuild File Ġ= ĠFile ( project Root (), Ġ" build . gradle ") ĊĠĠĠĠĠĠĠ Ġbuild File . createNew File () ĊĠĠĠĠĠĠĠ Ġ// Ġcopy Ġlocal . properties ĊĠĠĠĠĠĠĠ Ġval Ġapp Toolkit Properties Ġ= ĠFile ("../../ app - toolkit / local . properties ") ĊĠĠĠĠĠĠĠ Ġif Ġ( app Toolkit Properties . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Toolkit Properties . copy To ( File ( project Root (), Ġ" local . properties "), Ġoverwrite Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ("../../ local . properties "). copy To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( project Root (), Ġ" local . properties "), Ġoverwrite Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġstream Ġ= ĠPlugin Test :: class . java . class Loader . getResource AsStream (" sdk . prop ") ĊĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= ĠProperties () ĊĠĠĠĠĠĠĠ Ġproperties . load ( stream ) ĊĠĠĠĠĠĠĠ Ġcompile Sdk Version Ġ= Ġproperties . getProperty (" compile Sdk Version ") ĊĠĠĠĠĠĠĠ Ġbuild Tools Version Ġ= Ġproperties . getProperty (" build Tools Version ") ĊĠĠĠĠĠĠĠ ĠtestData (" app - project "). copy Re cursively ( project Root ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Simple Build Gradle () Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild File . write Text (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugins Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (' com . android . application ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (' android x . navigation . safe args ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompile Sdk Version Ġ$ compile Sdk Version ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Tools Version Ġ"$ build Tools Version " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrun Generate Task () Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild File . write Text (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugins Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (' com . android . application ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (' android x . navigation . safe args ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompile Sdk Version Ġ$ compile Sdk Version ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Tools Version Ġ"$ build Tools Version " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflavor Dimensions Ġ" mode " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Fl avors Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfoo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdimension Ġ" mode " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Id Suffix Ġ". foo " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot foo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdimension Ġ" mode " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĊĠĠĠĠĠĠĠ Ġrun Gradle (" generate Safe Args Not foo Debug ", Ġ" generate Safe Args Foo Debug ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Successful Task (" generate Safe Args Not foo Debug ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Successful Task (" generate Safe Args Foo Debug ") ĊĊĠĠĠĠĠĠĠ Ġassert Generated (" not foo / debug /$ NEXT _ DIRECTION S ") ĊĠĠĠĠĠĠĠ Ġassert Not Generated (" foo / debug /$ NEXT _ DIRECTION S ") ĊĠĠĠĠĠĠĠ Ġassert Generated (" foo / debug /$ FOO _ DIRECTION S ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġincremental Add () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Simple Build Gradle () ĊĠĠĠĠĠĠĠ Ġrun Gradle (" generate Safe Args Debug "). assert Successful Task (" generate Safe Args Debug ") ĊĠĠĠĠĠĠĠ Ġval Ġnext Last Mod Ġ= Ġassert Generated (" debug /$ NEXT _ DIRECTION S "). lastModified () ĊĊĠĠĠĠĠĠĠ ĠtestData (" incremental - test - data / add _ nav . xml "). copy To ( nav Resource (" add _ nav . xml ")) ĊĊĠĠĠĠĠĠĠ Ġ// Ġlast Modified Ġhas Ġone Ġsecond Ġprecision Ġon Ġcertain Ġplatforms Ġand Ġj dk Ġversions ĊĠĠĠĠĠĠĠ Ġ// Ġso Ġsleep Ġfor Ġa Ġsecond ĊĠĠĠĠĠĠĠ ĠThread . sleep ( SEC ) ĊĠĠĠĠĠĠĠ Ġrun Gradle (" generate Safe Args Debug "). assert Successful Task (" generate Safe Args Debug ") ĊĠĠĠĠĠĠĠ Ġassert Generated (" debug /$ AD DITION AL _ DIRECTION S ") ĊĠĠĠĠĠĠĠ Ġval Ġnew Next Last Mod Ġ= Ġassert Generated (" debug /$ NEXT _ DIRECTION S "). lastModified () ĊĠĠĠĠĠĠĠ ĠassertThat ( new Next Last Mod , Ġ` is `( next Last Mod )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġincremental Modify () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Simple Build Gradle () ĊĠĠĠĠĠĠĠ ĠtestData (" incremental - test - data / add _ nav . xml "). copy To ( nav Resource (" add _ nav . xml ")) ĊĊĠĠĠĠĠĠĠ Ġrun Gradle (" generate Safe Args Debug "). assert Successful Task (" generate Safe Args Debug ") ĊĠĠĠĠĠĠĠ Ġval Ġmain Last Mod Ġ= Ġassert Generated (" debug /$ MAIN _ DIRECTION S "). lastModified () ĊĠĠĠĠĠĠĠ Ġval Ġadditional Last Mod Ġ= Ġassert Generated (" debug /$ AD DITION AL _ DIRECTION S "). lastModified () ĊĠĠĠĠĠĠĠ Ġassert Generated (" debug /$ NEXT _ DIRECTION S ") ĊĊĠĠĠĠĠĠĠ ĠtestData (" incremental - test - data / modified _ nav . xml "). copy To ( nav Resource (" nav _ test . xml "), Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġlast Modified Ġhas Ġone Ġsecond Ġprecision Ġon Ġcertain Ġplatforms Ġand Ġj dk Ġversions ĊĠĠĠĠĠĠĠ Ġ// Ġso Ġsleep Ġfor Ġa Ġsecond ĊĠĠĠĠĠĠĠ ĠThread . sleep ( SEC ) ĊĠĠĠĠĠĠĠ Ġrun Gradle (" generate Safe Args Debug "). assert Successful Task (" generate Safe Args Debug ") ĊĠĠĠĠĠĠĠ Ġval Ġnew Main Last Mod Ġ= Ġassert Generated (" debug /$ MAIN _ DIRECTION S "). lastModified () ĊĠĠĠĠĠĠĠ Ġ// Ġmain Ġdirections Ġwere Ġregenerated ĊĠĠĠĠĠĠĠ ĠassertThat ( new Main Last Mod , Ġnot ( main Last Mod )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġbut Ġadditional Ġdirections Ġweren 't Ġtouched ĊĠĠĠĠĠĠĠ Ġval Ġnew Additional Last Mod Ġ= Ġassert Generated (" debug /$ AD DITION AL _ DIRECTION S "). lastModified () ĊĠĠĠĠĠĠĠ ĠassertThat ( new Additional Last Mod , Ġ` is `( additional Last Mod )) ĊĊĠĠĠĠĠĠĠ Ġassert Generated (" debug /$ MODI FIED _ NEXT _ DIRECTION S ") ĊĠĠĠĠĠĠĠ Ġassert Not Generated (" debug /$ NEXT _ DIRECTION S ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġincremental Remove () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Simple Build Gradle () ĊĠĠĠĠĠĠĠ ĠtestData (" incremental - test - data / add _ nav . xml "). copy To ( nav Resource (" add _ nav . xml ")) ĊĊĠĠĠĠĠĠĠ Ġrun Gradle (" generate Safe Args Debug "). assert Successful Task (" generate Safe Args Debug ") ĊĠĠĠĠĠĠĠ Ġval Ġmain Last Mod Ġ= Ġassert Generated (" debug /$ MAIN _ DIRECTION S "). lastModified () ĊĠĠĠĠĠĠĠ Ġassert Generated (" debug /$ AD DITION AL _ DIRECTION S ") ĊĊĠĠĠĠĠĠĠ Ġval Ġwas Removed Ġ= Ġnav Resource (" add _ nav . xml "). delete () ĊĠĠĠĠĠĠĠ ĠassertThat ( was Removed , Ġ` is `( true )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġlast Modified Ġhas Ġone Ġsecond Ġprecision Ġon Ġcertain Ġplatforms Ġand Ġj dk Ġversions ĊĠĠĠĠĠĠĠ Ġ// Ġso Ġsleep Ġfor Ġa Ġsecond ĊĠĠĠĠĠĠĠ ĠThread . sleep ( SEC ) ĊĠĠĠĠĠĠĠ Ġrun Gradle (" generate Safe Args Debug "). assert Successful Task (" generate Safe Args Debug ") ĊĠĠĠĠĠĠĠ Ġval Ġnew Main Last Mod Ġ= Ġassert Generated (" debug /$ MAIN _ DIRECTION S "). lastModified () ĊĠĠĠĠĠĠĠ Ġ// Ġmain Ġdirections Ġweren 't Ġtouched ĊĠĠĠĠĠĠĠ ĠassertThat ( new Main Last Mod , Ġ` is `( main Last Mod )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġbut Ġadditional Ġdirections Ġare Ġremoved ĊĠĠĠĠĠĠĠ Ġassert Not Generated (" debug /$ AD DITION AL _ DIRECTION S ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinvalid Modify () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Simple Build Gradle () ĊĠĠĠĠĠĠĠ ĠtestData (" incremental - test - data / add _ nav . xml "). copy To ( nav Resource (" add _ nav . xml ")) ĊĠĠĠĠĠĠĠ Ġrun Gradle (" generate Safe Args Debug "). assert Successful Task (" generate Safe Args Debug ") ĊĠĠĠĠĠĠĠ Ġval Ġstep 1 Main Last Mod Ġ= Ġassert Generated (" debug /$ MAIN _ DIRECTION S "). lastModified () ĊĠĠĠĠĠĠĠ Ġval Ġstep 1 Additional Last Mod Ġ= Ġassert Generated (" debug /$ AD DITION AL _ DIRECTION S "). lastModified () ĊĠĠĠĠĠĠĠ Ġassert Generated (" debug /$ NEXT _ DIRECTION S ") ĊĊĠĠĠĠĠĠĠ ĠtestData (" invalid / fail ing _ nav . xml "). copy To ( nav Resource (" nav _ test . xml "), Ġtrue ) ĊĠĠĠĠĠĠĠ ĠThread . sleep ( SEC ) ĊĠĠĠĠĠĠĠ Ġrun And Fail Gradle (" generate Safe Args Debug "). assert Fail ing Task (" generate Safe Args Debug ") ĊĠĠĠĠĠĠĠ Ġval Ġstep 2 Main Last Mod Ġ= Ġassert Generated (" debug /$ MAIN _ DIRECTION S "). lastModified () ĊĠĠĠĠĠĠĠ Ġ// Ġmain Ġdirections Ġwere Ġregenerated ĊĠĠĠĠĠĠĠ ĠassertThat ( step 2 Main Last Mod , Ġnot ( step 1 Main Last Mod )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġbut Ġadditional Ġdirections Ġweren 't Ġtouched ĊĠĠĠĠĠĠĠ Ġval Ġstep 2 Additional Last Mod Ġ= Ġassert Generated (" debug /$ AD DITION AL _ DIRECTION S "). lastModified () ĊĠĠĠĠĠĠĠ ĠassertThat ( step 2 Additional Last Mod , Ġ` is `( step 1 Additional Last Mod )) ĊĊĠĠĠĠĠĠĠ Ġval Ġstep 2 Modified Time Ġ= Ġassert Generated (" debug /$ MODI FIED _ NEXT _ DIRECTION S "). lastModified () ĊĠĠĠĠĠĠĠ Ġassert Not Generated (" debug /$ NEXT _ DIRECTION S ") ĊĊĠĠĠĠĠĠĠ ĠtestData (" incremental - test - data / modified _ nav . xml "). copy To ( nav Resource (" nav _ test . xml "), Ġtrue ) ĊĠĠĠĠĠĠĠ ĠThread . sleep ( SEC ) ĊĠĠĠĠĠĠĠ Ġrun Gradle (" generate Safe Args Debug "). assert Successful Task (" generate Safe Args Debug ") ĊĊĠĠĠĠĠĠĠ Ġ// Ġadditional Ġdirections Ġare Ġtouched Ġbecause Ġonce Ġtask Ġfailed , ĊĠĠĠĠĠĠĠ Ġ// Ġgradle Ġnext Ġtime Ġmakes Ġfull Ġrun ĊĠĠĠĠĠĠĠ Ġval Ġstep 3 Additional Last Mod Ġ= Ġassert Generated (" debug /$ AD DITION AL _ DIRECTION S "). lastModified () ĊĠĠĠĠĠĠĠ ĠassertThat ( step 3 Additional Last Mod , Ġnot ( step 2 Additional Last Mod )) ĊĊĠĠĠĠĠĠĠ Ġval Ġstep 3 Modified Time Ġ= Ġassert Generated (" debug /$ MODI FIED _ NEXT _ DIRECTION S "). lastModified () ĊĠĠĠĠĠĠĠ ĠassertThat ( step 2 Modified Time , Ġnot ( step 3 Modified Time )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠtestData ( name : ĠString ) Ġ= ĠFile (" src / test / test - data ", Ġname ) Ċ Ċ private Ġfun ĠBuild Result . assert Successful Task ( name : ĠString ): ĠBuild Result Ġ{ ĊĠĠĠ ĠassertThat ( task (" :$ name ") !!. outcome , Ġ` is `( Task Outcome . SUCCESS )) ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ private Ġfun ĠBuild Result . assert Fail ing Task ( name : ĠString ): ĠBuild Result Ġ{ ĊĠĠĠ ĠassertThat ( task (" :$ name ") !!. outcome , Ġ` is `( Task Outcome . FAILED )) ĊĠĠĠ Ġreturn Ġthis Ċ }