package Ġcom . jetbrains . edu . slow . integration . step ik Ċ Ċ import Ġcom . intellij . openapi . application . run Write Action Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . vfs . V fs Util Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . jetbrains . edu . course creator . CC Utils Ċ import Ġcom . jetbrains . edu . course creator . actions . step ik . CC Push Course Ċ import Ġcom . jetbrains . edu . course creator . actions . step ik . CC Push Lesson Ċ import Ġcom . jetbrains . edu . course creator . actions . step ik . CC Push Section Ċ import Ġcom . jetbrains . edu . course creator . step ik . CC Step ik Connector Ċ import Ġcom . jetbrains . edu . learning . Course Builder Ċ import Ġcom . jetbrains . edu . learning . Study Task Manager Ċ import Ġcom . jetbrains . edu . learning . configur ators . Fake Gradle Based Language Ċ import Ġcom . jetbrains . edu . learning . course Ċ import Ġcom . jetbrains . edu . learning . course Dir Ċ import Ġcom . jetbrains . edu . learning . course Format .* Ċ import Ġcom . jetbrains . edu . learning . course Format . tasks . choice . Choice Option Status Ċ import Ġcom . jetbrains . edu . learning . course Format . tasks . choice . Choice Task Ċ import Ġcom . jetbrains . edu . learning . course Generation . Generator Utils Ċ import Ġcom . jetbrains . edu . learning . step ik . api . Step ik Connector Ċ import Ġcom . jetbrains . edu . learning . step ik . api . Step ik Course Loader Ċ import Ġcom . jetbrains . edu . learning . step ik . api . load And Fill Lesson Additional Info Ċ import Ġcom . jetbrains . edu . learning . step ik . hyper skill . api . Hyper skill Project Ċ import Ġcom . jetbrains . edu . learning . step ik . hyper skill . course Format . Hyper skill Course Ċ Ċ open Ġclass ĠSte pi k IntegrationTest Ġ: ĠSte pi k TestCase () Ġ{ ĊĊĠ Ġfun Ġ` test Ġupload Ġcourse `() Ġ{ ĊĠĠĠ Ġval Ġcourse Ġ= Ġinit Course Ġ{ ĊĠĠĠĠĠ Ġlesson (" lesson 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġcheck Course Uploaded ( course ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġupload Ġcourse Ġwith Ġtop Ġlevel Ġlesson `() Ġ{ ĊĠĠĠ Ġval Ġlocal Course Ġ= Ġinit Course Ġ{ ĊĠĠĠĠĠ Ġlesson (" lesson 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġcheck TopLevel Less ons ( local Course ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġupload Ġcourse Ġwith Ġframework Ġlesson `() Ġ{ ĊĠĠĠ Ġval Ġlocal Course Ġ= Ġinit Course Ġ{ ĊĠĠĠĠĠ Ġframework Lesson (" lesson 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġcheck TopLevel Less ons ( local Course ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġupload Ġcourse Ġwith Ġtop Ġlevel Ġless ons `() Ġ{ ĊĠĠĠ Ġval Ġlocal Course Ġ= Ġinit Course Ġ{ ĊĠĠĠĠĠ Ġlesson (" lesson 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġlesson (" lesson 2 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcheck TopLevel Less ons ( local Course ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġupload Ġtask Ġfailed Ġbecause Ġof Ġbroken Ġplaceholders `() Ġ{ ĊĠĠĠ Ġval Ġlocal Course Ġ= Ġcourse With Files ( course Mode Ġ= ĠCC Utils . CO URSE _ MODE ) Ġ{ ĊĠĠĠĠĠ Ġlesson (" lesson 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ", Ġ" fn Ġf iz zz () Ġ= Ġ< p > TODO ()</ p >") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġas ĠE du Course ĊĊĠĠĠ Ġval Ġplaceholder Ġ= Ġlocal Course . lessons . first (). task List . first (). task Files [" f izz . kt "] !!. answer Place holders ?. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" Cannot Ġfind Ġplaceholder ") ĊĠĠĠ Ġplaceholder . offset Ġ= Ġ 1 0 0 0 ĊĊĠĠĠ Ġval Ġlesson Ġ= Ġlocal Course . lessons [ 0 ] ĊĠĠĠ Ġval Ġtask Ġ= Ġlesson . task List [ 0 ] ĊĠĠĠ ĠassertFalse (" Task Ġshould Ġnot Ġbe Ġloaded Ġinto Ġthe Ġsystem Ġbecause Ġplaceholder Ġis Ġbroken ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCC Step ik Connector . post Task ( project , Ġtask , Ġlesson . id )) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġpost Ġtop Ġlevel Ġlesson `() Ġ{ ĊĠĠĠ Ġval Ġlocal Course Ġ= Ġinit Course Ġ{ ĊĠĠĠĠĠ Ġlesson (" lesson 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġlesson (" lesson 2 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġnew Lesson Ġ= Ġadd New Lesson ( project , Ġ" lesson 3 ", Ġ 3 , Ġlocal Course , Ġlocal Course , Ġproject . course Dir ) ĊĠĠĠ ĠC CP ush Lesson . do Push ( new Lesson , Ġproject , Ġlocal Course ) ĊĊĠĠĠ Ġcheck TopLevel Less ons ( local Course ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġre arrange Ġless ons `() Ġ{ ĊĠĠĠ Ġval Ġlocal Course Ġ= Ġinit Course Ġ{ ĊĠĠĠĠĠ Ġlesson (" lesson 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġlesson (" lesson 2 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġlesson 1 Ġ= Ġlocal Course . get Lesson (" lesson 1 ") !! ĊĠĠĠ Ġval Ġlesson 2 Ġ= Ġlocal Course . get Lesson (" lesson 2 ") !! ĊĠĠĠ Ġlesson 1 . index Ġ= Ġ 2 ĊĠĠĠ Ġlesson 2 . index Ġ= Ġ 1 ĊĠĠĠ Ġlocal Course . sort Items () ĊĠĠĠ ĠC CP ush Course . do Push ( project , Ġlocal Course ) ĊĊĠĠĠ Ġcheck TopLevel Less ons ( local Course ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġupload Ġcourse Ġwith Ġsection `() Ġ{ ĊĠĠĠ Ġval Ġlocal Course Ġ= Ġinit Course Ġ{ ĊĠĠĠĠĠ Ġsection (" section 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġlesson (" lesson 1 ") ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcheck Sections ( local Course ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġre arrange Ġsections `() Ġ{ ĊĠĠĠ Ġval Ġlocal Course Ġ= Ġinit Course Ġ{ ĊĠĠĠĠĠ Ġsection (" section 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġlesson (" lesson 1 ") ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġsection (" section 2 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġlesson (" lesson 1 ") ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsection 1 Ġ= Ġlocal Course . get Section (" section 1 ") ĊĠĠĠ Ġval Ġsection 2 Ġ= Ġlocal Course . get Section (" section 2 ") ĊĠĠĠ Ġsection 1 !!. index Ġ= Ġ 2 ĊĠĠĠ Ġsection 2 !!. index Ġ= Ġ 1 ĊĠĠĠ Ġlocal Course . sort Items () ĊĠĠĠ ĠC CP ush Course . do Push ( project , Ġlocal Course ) ĊĊĠĠĠ Ġcheck Sections ( local Course ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġpost Ġlesson Ġinto Ġsection `() Ġ{ ĊĠĠĠ Ġval Ġlocal Course Ġ= Ġinit Course Ġ{ ĊĠĠĠĠĠ Ġsection (" section 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġlesson (" lesson 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlesson (" lesson 2 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsection Ġ= Ġlocal Course . get Section (" section 1 ") ĊĠĠĠ Ġval Ġnew Lesson Ġ= Ġadd New Lesson ( project , Ġ" lesson 3 ", Ġ 3 , Ġlocal Course , Ġsection !! , Ġproject . course Dir ) ĊĠĠĠ ĠC CP ush Lesson . do Push ( new Lesson , Ġproject , ĠStudy Task Manager . getInstance ( project ). course Ġas ĠE du Course ) ĊĊĠĠĠ Ġcheck Sections ( local Course ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġre arrange Ġless ons Ġinside Ġsection `() Ġ{ ĊĠĠĠ Ġval Ġlocal Course Ġ= Ġinit Course Ġ{ ĊĠĠĠĠĠ Ġsection (" section 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġlesson (" lesson 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlesson (" lesson 2 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsection Ġ= Ġlocal Course . get Section (" section 1 ") ĊĠĠĠ Ġval Ġnew Lesson Ġ= Ġadd New Lesson ( project , Ġ" lesson 3 ", Ġ 3 , Ġlocal Course , Ġsection !! , Ġproject . course Dir ) ĊĊĠĠĠ ĠC CP ush Lesson . do Push ( new Lesson , Ġproject , ĠStudy Task Manager . getInstance ( project ). course Ġas ĠE du Course ) ĊĊĠĠĠ Ġcheck Sections ( local Course ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġcustom Ġlesson Ġname `() Ġ{ ĊĠĠĠ Ġval Ġlocal Course Ġ= Ġcourse With Files ( course Mode Ġ= ĠCC Utils . CO URSE _ MODE ) Ġ{ ĊĠĠĠĠĠ Ġlesson (" lesson 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġedu Task Ġ{ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval ĠnewName Ġ= Ġ" re named " ĊĠĠĠ Ġlocal Course . lessons [ 0 ]. custom Present able Name Ġ= ĠnewName ĊĊĠĠĠ ĠC CP ush Course . do Push ( project , Ġlocal Course . as E du Course ()) ĊĠĠĠ Ġval Ġcourse From Step ik Ġ= Ġget Course From Step ik ( Study Task Manager . getInstance ( project ). course !!. id ) ĊĠĠĠ Ġval Ġsection Ġ= ĠSte pi k Connector . getInstance (). get Section ( course From Step ik . section Ids [ 0 ]) !! ĊĠĠĠ Ġval Ġlesson Ġ= ĠSte pi k Course Loader . get Less ons From Units ( course From Step ik , Ġsection . units , Ġfalse )[ 0 ] ĊĠĠĠ Ġload And Fill Lesson Additional Info ( lesson ) ĊĊĠĠĠ ĠassertEquals ( new Name , Ġlesson . present able Name ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġpost Ġnew Ġsection `() Ġ{ ĊĠĠĠ Ġval Ġlocal Course Ġ= Ġinit Course Ġ{ ĊĠĠĠĠĠ Ġsection (" section 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġlesson (" lesson 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġnew Section Ġ= Ġadd New Section ( project , Ġ" section 2 ", Ġ 2 , Ġlocal Course , Ġproject . course Dir ) ĊĠĠĠ ĠC CP ush Section . do Push ( project , Ġnew Section , Ġlocal Course ) ĊĊĠĠĠ Ġcheck Sections ( local Course ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġtop - level Ġless ons Ġwrapped Ġinto Ġsection `() Ġ{ ĊĠĠĠ Ġval Ġlocal Course Ġ= Ġinit Course Ġ{ ĊĠĠĠĠĠ Ġlesson (" lesson 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠCC Utils . wrap Into Section ( project , Ġlocal Course , Ġlocal Course . lessons , Ġ" section 1 ") ĊĊĠĠĠ ĠC CP ush Course . do Push ( project , Ġlocal Course ) ĊĊĠĠĠ Ġcheck Sections ( local Course ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġfile Ġtexts Ġin Ġtask `() Ġ{ ĊĠĠĠ Ġval Ġlocal Course Ġ= Ġcourse With Files Ġ{ ĊĠĠĠĠĠ Ġlesson (" lesson 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġedu Task (" task 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" src / Task . kt ") ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" test / Tests . kt ") ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" build . gradle ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtask Text Ġ= Ġ"// Ġtask Ġtext " ĊĠĠĠ Ġval Ġtest Text Ġ= Ġ"// Ġtest Ġtext " ĊĠĠĠ Ġval Ġadditional Text Ġ= Ġ"// Ġadditional Ġtext " ĊĊĠĠĠ Ġset Text (" lesson 1 / task 1 / src / Task . kt ", Ġtask Text ) ĊĠĠĠ Ġset Text (" lesson 1 / task 1 / test / Tests . kt ", Ġtest Text ) ĊĠĠĠ Ġset Text (" lesson 1 / task 1 / build . gradle ", Ġadditional Text ) ĊĊĠĠĠ ĠC CP ush Course . do Push ( project , Ġlocal Course . as E du Course ()) ĊĊĠĠĠ Ġval Ġcourse From Step ik Ġ= Ġget Course From Step ik ( Study Task Manager . getInstance ( project ). course !!. id ) ĊĠĠĠ Ġval Ġsection Ġ= ĠSte pi k Connector . getInstance (). get Section ( course From Step ik . section Ids [ 0 ]) !! ĊĠĠĠ Ġval Ġless ons From Units Ġ= ĠSte pi k Course Loader . get Less ons From Units ( course From Step ik , Ġsection . units , Ġfalse ) ĊĊĠĠĠ Ġval Ġtask From Step ik Ġ= Ġless ons From Units [ 0 ]. get Task (" task 1 ") Ġ?: Ġerror (" Can 't Ġfind Ġ` task 1 ` ") ĊĠĠĠ ĠassertEquals ( task Text , Ġtask From Step ik . get Task File (" src / Task . kt ") ?. text ) ĊĠĠĠ ĠassertEquals ( test Text , Ġtask From Step ik . get Task File (" test / Tests . kt ") ?. text ) ĊĠĠĠ ĠassertEquals ( additional Text , Ġtask From Step ik . get Task File (" build . gradle ") ?. text ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġfile Ġtext Ġin ĠQu iz Ġtask `() Ġ{ ĊĠĠĠ Ġval Ġchoice Options Ġ= Ġmap Of (" 1 " Ġto ĠChoice Option Status . CORRECT , Ġ" 2 " Ġto ĠChoice Option Status . IN CORRECT ) ĊĊĠĠĠ Ġval Ġlocal Course Ġ= Ġcourse With Files ( course Mode Ġ= ĠCC Utils . CO URSE _ MODE ) Ġ{ ĊĠĠĠĠĠ Ġlesson (" lesson 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġchoice Task (" Quiz ", Ġchoice Options Ġ= Ġchoice Options ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" src / Task . kt ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtask Text Ġ= Ġ"// Ġtask Ġtext " ĊĠĠĠ Ġset Text (" lesson 1 / Quiz / src / Task . kt ", Ġtask Text ) ĊĠĠĠ ĠC CP ush Course . do Push ( project , Ġlocal Course . as E du Course ()) ĊĊĠĠĠ Ġval Ġcourse From Step ik Ġ= Ġget Course From Step ik ( Study Task Manager . getInstance ( project ). course !!. id ) ĊĠĠĠ Ġval Ġsection Ġ= ĠSte pi k Connector . getInstance (). get Section ( course From Step ik . section Ids [ 0 ]) !! ĊĠĠĠ Ġval Ġlesson Ġ= ĠSte pi k Course Loader . get Less ons From Units ( course From Step ik , Ġsection . units , Ġfalse )[ 0 ] ĊĠĠĠ Ġload And Fill Lesson Additional Info ( lesson ) ĊĊĠĠĠ Ġval Ġtask From Step ik Ġ= Ġlesson . get Task (" Quiz ") Ġ?: Ġerror (" Can 't Ġfind Ġ` Quiz ` ") ĊĠĠĠ ĠassertEquals ( task Text , Ġtask From Step ik . get Task File (" src / Task . kt ") ?. text ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġplaceholders Ġin ĠQu iz Ġtask `() Ġ{ ĊĠĠĠ Ġval Ġchoice Options Ġ= Ġmap Of (" 1 " Ġto ĠChoice Option Status . CORRECT , Ġ" 2 " Ġto ĠChoice Option Status . IN CORRECT ) ĊĊĠĠĠ Ġval Ġlocal Course Ġ= Ġcourse With Files ( course Mode Ġ= ĠCC Utils . CO URSE _ MODE ) Ġ{ ĊĠĠĠĠĠ Ġlesson (" lesson 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġchoice Task (" Quiz ", Ġchoice Options Ġ= Ġchoice Options ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" src / Task . kt ", Ġ" fun Ġfoo (): ĠString Ġ= Ġ< p > Foo </ p >") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplaceholder ( 0 ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfind Placeholder ( 0 , Ġ 0 , Ġ" src / Task . kt ", Ġ 0 ). apply Ġ{ ĊĠĠĠĠĠ Ġplaceholder Text Ġ= Ġ" TODO ()" ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠC CP ush Course . do Push ( project , Ġlocal Course . as E du Course ()) ĊĊĠĠĠ Ġval Ġcourse From Step ik Ġ= Ġget Course From Step ik ( Study Task Manager . getInstance ( project ). course !!. id ) ĊĠĠĠ Ġval Ġsection Ġ= ĠSte pi k Connector . getInstance (). get Section ( course From Step ik . section Ids [ 0 ]) !! ĊĠĠĠ Ġval Ġlesson Ġ= ĠSte pi k Course Loader . get Less ons From Units ( course From Step ik , Ġsection . units , Ġfalse )[ 0 ] ĊĠĠĠ Ġload And Fill Lesson Additional Info ( lesson ) ĊĊĠĠĠ Ġval Ġtask From Step ik Ġ= Ġlesson . get Task (" Quiz ") Ġ?: Ġerror (" Can 't Ġfind Ġ` Quiz ` ") ĊĠĠĠ ĠassertEquals (" fun Ġfoo (): ĠString Ġ= ĠTODO ()", Ġtask From Step ik . get Task File (" src / Task . kt ") ?. text ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġcourse Ġwith Ġlanguage Ġversion `() Ġ{ ĊĠĠĠ Ġval Ġcourse Ġ= Ġcourse With Files ( course Mode Ġ= ĠCC Utils . CO URSE _ MODE ) Ġ{} ĊĠĠĠ Ġcourse . language Ġ= Ġcourse . language Ġ+ Ġ" Ġ 2 " ĊĠĠĠ Ġval Ġexpected Language Ġ= Ġcourse . language ĊĠĠĠ ĠC CP ush Course . do Push ( project , Ġcourse . as E du Course ()) ĊĠĠĠ Ġval Ġuploaded Course Ġ= ĠStudy Task Manager . getInstance ( project ). course Ġas ĠE du Course ĊĠĠĠ Ġval Ġremote Course Ġ= Ġget Course From Step ik ( uploaded Course . id ) ĊĠĠĠ ĠassertEquals ( expected Language , Ġremote Course . language ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġcourse Ġwith Ġchoice Ġtask `() Ġ{ ĊĠĠĠ Ġval Ġexpected Choice Options Ġ= Ġmap Of (" 1 " Ġto ĠChoice Option Status . CORRECT , Ġ" 2 " Ġto ĠChoice Option Status . CORRECT ) ĊĠĠĠ Ġval Ġtask Name Ġ= Ġ" G reatest Ġname Ġever " ĊĠĠĠ Ġval Ġlocal Course Ġ= Ġcourse With Files ( course Mode Ġ= ĠCC Utils . CO URSE _ MODE ) Ġ{ ĊĠĠĠĠĠ Ġlesson Ġ{ ĊĠĠĠĠĠĠĠ Ġchoice Task ( task Name , Ġis Multiple Choice Ġ= Ġtrue , Ġchoice Options Ġ= Ġexpected Choice Options ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" text . txt ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsource Choice Task Ġ= Ġfind Task ( 0 , Ġ 0 ) Ġas ĠChoice Task ĊĠĠĠ Ġval Ġcorrect Ġ= Ġ" correct " ĊĠĠĠ Ġval Ġincorrect Ġ= Ġ" incorrect " ĊĊĠĠĠ Ġsource Choice Task . message Correct Ġ= Ġcorrect ĊĠĠĠ Ġsource Choice Task . message Incorrect Ġ= Ġincorrect ĊĊĠĠĠ Ġval Ġcustom Name Ġ= Ġ" New Ġcool Ġcustom Ġname " ĊĠĠĠ Ġsource Choice Task . custom Present able Name Ġ= Ġcustom Name ĊĊĠĠĠ Ġval Ġsource Course Ġ= Ġinit Course ( local Course ) ĊĊĠĠĠ Ġval Ġcourse From Step ik Ġ= Ġget Course From Step ik ( source Course . id ) ĊĠĠĠ Ġcheck Course Uploaded ( source Course ) ĊĊĠĠĠ Ġcourse From Step ik . course Mode Ġ= ĠCC Utils . CO URSE _ MODE ĊĠĠĠ ĠSte pi k Course Loader . fill Items ( course From Step ik ) ĊĊĠĠĠ Ġval Ġtask Ġ= Ġ( course From Step ik . items [ 0 ] Ġas ĠLess on ). task List [ 0 ] ĊĠĠĠ Ġassert InstanceOf ( task , ĠChoice Task :: class . java ) ĊĊĠĠĠ Ġval Ġchoice Task Ġ= Ġtask Ġas ĠChoice Task ĊĠĠĠ ĠassertTrue ( choice Task . is Multiple Choice ) ĊĠĠĠ ĠassertEquals ( expected Choice Options , Ġchoice Task . choice Options . associate By ({ Ġit . text Ġ}, Ġ{ Ġit . status Ġ})) ĊĠĠĠ ĠassertEquals ( correct , Ġchoice Task . message Correct ) ĊĠĠĠ ĠassertEquals ( incorrect , Ġchoice Task . message Incorrect ) ĊĊĠĠĠ ĠassertEquals ( task Name , Ġchoice Task . name ) ĊĠĠĠ Ġ@ Suppress (" deprecation ") ĊĠĠĠ ĠassertEquals ( custom Name , Ġchoice Task . custom Present able Name ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġupload Ġcourse Ġwith Ġhidden Ġsolutions `() Ġ{ ĊĠĠĠ Ġval Ġcourse Ġ= Ġcourse With Files Ġ{ ĊĠĠĠĠĠ Ġlesson (" lesson 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġedu Task (" task 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġedu Task (" task 2 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġcourse . solutions Hidden Ġ= Ġtrue ĊĠĠĠ Ġcourse . get Lesson (" lesson 1 ") !!. get Task (" task 1 ") !!. solution Hidden Ġ= Ġtrue ĊĠĠĠ Ġcourse . get Lesson (" lesson 1 ") !!. get Task (" task 2 ") !!. solution Hidden Ġ= Ġfalse ĊĠĠĠ Ġval Ġsource Course Ġ= Ġinit Course ( course ) ĊĠĠĠ Ġval Ġcourse From Step ik Ġ= Ġget Course From Step ik ( source Course . id ) ĊĠĠĠ Ġcheck Course Uploaded ( source Course ) ĊĠĠĠ ĠSte pi k Course Loader . fill Items ( course From Step ik ) ĊĠĠĠ ĠassertTrue ( course From Step ik . solutions Hidden ) ĊĠĠĠ ĠassertTrue ( course From Step ik . get Lesson (" lesson 1 ") !!. get Task (" task 1 ") !!. solution Hidden !! ) ĊĠĠĠ ĠassertFalse ( course From Step ik . get Lesson (" lesson 1 ") !!. get Task (" task 2 ") !!. solution Hidden !! ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ` test Ġupload ĠHyper skill Ġlesson Ġto ĠSte pi k `() Ġ{ ĊĠĠĠ Ġval Ġcourse Ġ= Ġcourse With Files ( language Ġ= ĠFake Gradle Based Language , Ġcourse Producer Ġ= Ġ:: Hyper skill Course ) Ġ{ ĊĠĠĠĠĠ Ġlesson Ġ{} ĊĠĠĠ Ġ} Ġas ĠHyper skill Course ĊĠĠĠ Ġcourse . hyper skill Project Ġ= ĠHyper skill Project () ĊĠĠĠ Ġval Ġlesson Ġ= Ġcourse . lessons . first () ĊĠĠĠ ĠassertTrue ( CC Step ik Connector . post Lesson ( project , Ġlesson , Ġlesson . index , Ġ- 1 )) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġset Text ( path : ĠString , Ġtext : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= Ġfind File ( path ) ĊĠĠĠ Ġrun Write Action Ġ{ ĠV fs Util . save Text ( file , Ġtext ) Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcheck Sections ( local Course : ĠCourse ) Ġ{ ĊĠĠĠ Ġval Ġcourse From Step ik Ġ= Ġget Course From Step ik ( local Course . id ) ĊĊĠĠĠ ĠSte pi k Course Loader . fill Items ( course From Step ik ) ĊĠĠĠ ĠassertEquals (" Sections Ġnumber Ġmismatch ", Ġlocal Course . sections . size , Ġcourse From Step ik . sections . size ) ĊĠĠĠ Ġlocal Course . sections . forEach Indexed Ġ{ Ġindex , Ġsection Ġ-> ĊĠĠĠĠĠ Ġval Ġsection From Step ik Ġ= Ġcourse From Step ik . sections [ index ] ĊĠĠĠĠĠ ĠassertEquals (" Sections Ġname Ġmismatch ", Ġsection . name , Ġsection From Step ik . name ) ĊĠĠĠĠĠ ĠassertEquals (" Less ons Ġnumber Ġmismatch ", Ġsection . lessons . size , Ġsection From Step ik . lessons . size ) ĊĠĠĠĠĠ Ġsection . lessons . forEach Indexed Ġ{ Ġlesson Index , Ġlesson Ġ-> ĊĠĠĠĠĠĠĠ ĠassertEquals (" Less ons Ġname Ġmismatch ", Ġlesson . name , Ġsection From Step ik . lessons [ lesson Index ]. name ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcheck TopLevel Less ons ( local Course : ĠE du Course ) Ġ{ ĊĠĠĠ Ġval Ġcourse From Step ik Ġ= Ġget Course From Step ik ( local Course . id ) ĊĊĠĠĠ ĠassertEquals (" Course Ġwith Ġtop - level Ġless ons Ġshould Ġhave Ġonly Ġone Ġsection ", Ġ 1 , Ġlocal Course . section Ids . size ) ĊĊĠĠĠ ĠassertEquals (" Top - level Ġless ons Ġsection Ġid Ġmismatch ", Ġlocal Course . section Ids [ 0 ], Ġcourse From Step ik . section Ids [ 0 ]) ĊĠĠĠ Ġval Ġsection Ġ= ĠSte pi k Connector . getInstance (). get Section ( course From Step ik . section Ids [ 0 ]) !! ĊĠĠĠ ĠassertEquals (" Section Ġname Ġmismatch ", Ġlocal Course . name , Ġsection . name ) ĊĊĠĠĠ Ġval Ġless ons From Units Ġ= ĠSte pi k Course Loader . get Less ons From Units ( course From Step ik , Ġsection . units , Ġfalse ) ĊĊĠĠĠ ĠassertEquals (" Less ons Ġnumber Ġmismatch ", Ġlocal Course . lessons . size , Ġless ons From Units . size ) ĊĠĠĠ Ġlocal Course . lessons . forEach Indexed Ġ{ Ġindex , Ġlesson Ġ-> ĊĠĠĠĠĠ ĠassertEquals (" Less ons Ġname Ġmismatch ", Ġlesson . name , Ġless ons From Units [ index ]. name ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġinit Course ( builder : ĠCourse Builder . () Ġ-> ĠUnit ): ĠE du Course Ġ{ ĊĠĠĠ Ġval Ġcourse Ġ= Ġcourse With Files ( course Mode Ġ= ĠCC Utils . CO URSE _ MODE , Ġbuild Course Ġ= Ġbuilder ) ĊĠĠĠ Ġreturn Ġinit Course ( course ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġinit Course ( course : ĠCourse ): ĠE du Course Ġ{ ĊĠĠĠ ĠC CP ush Course . do Push ( project , Ġcourse . as E du Course ()) ĊĠĠĠ Ġreturn ĠStudy Task Manager . getInstance ( project ). course Ġas ĠE du Course ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Course From Step ik ( course Id : ĠInt ): ĠE du Course Ġ= ĊĠĠĠ ĠSte pi k Connector . getInstance (). getC ourse Info ( course Id , Ġtrue ) Ġ?: Ġerror ( ĊĠĠĠĠĠ Ġ" Uploaded Ġcourse Ġ`$ course Id ` Ġnot Ġfound Ġamong Ġcourses Ġavailable Ġto Ġin structor ") Ċ } Ċ Ċ internal Ġfun Ġadd New Lesson ( ĊĠ Ġproject : ĠProject , ĊĠ Ġname : ĠString , ĊĠ Ġindex : ĠInt , ĊĠ Ġcourse To Init : ĠCourse , ĊĠ Ġparent : ĠLess on Container , ĊĠ Ġvirtual File : ĠVirtual File Ċ ): ĠLess on Ġ{ ĊĠ Ġval Ġcourse Ġ= Ġcourse Ġ{ ĊĠĠĠ Ġlesson ( name ) Ġ{ ĊĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġval Ġnew Lesson Ġ= Ġcourse . get Lesson ( name ) !! ĊĠ Ġnew Lesson . index Ġ= Ġindex ĊĠ Ġnew Lesson . init ( course To Init , Ġparent , Ġfalse ) ĊĠ Ġparent . add Lesson ( new Lesson ) ĊĠ Ġif Ġ( parent Ġis ĠCourse ) Ġ{ ĊĠĠĠ ĠGenerator Utils . create Lesson ( project , Ġnew Lesson , Ġvirtual File ) ĊĠ Ġ} ĊĠ Ġelse Ġ{ ĊĠĠĠ Ġval Ġsection Dir Ġ= Ġvirtual File . find Child ( parent . name ) ĊĠĠĠ ĠGenerator Utils . create Lesson ( project , Ġnew Lesson , Ġsection Dir !! ) ĊĠ Ġ} ĊĊĠ Ġreturn Ġnew Lesson Ċ } Ċ Ċ internal Ġfun Ġadd New Section ( ĊĠ Ġproject : ĠProject , ĊĠ Ġname : ĠString , ĊĠ Ġindex : ĠInt , ĊĠ Ġcourse To Init : ĠCourse , ĊĠ Ġvirtual File : ĠVirtual File Ċ ): ĠSection Ġ{ ĊĠ Ġval Ġcourse Ġ= Ġcourse Ġ{ ĊĠĠĠ Ġsection ( name ) Ġ{ ĊĠĠĠĠĠ Ġlesson (" lesson 1 ") Ġ{ ĊĠĠĠĠĠĠĠ Ġedu Task Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtask File (" f izz . kt ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġval Ġnew Section Ġ= Ġcourse . get Section ( name ) !! ĊĠ Ġnew Section . index Ġ= Ġindex ĊĠ Ġcourse To Init . add Section ( new Section ) ĊĠ Ġcourse To Init . init ( null , Ġnull , Ġfalse ) ĊĠ ĠGenerator Utils . create Section ( project , Ġnew Section , Ġvirtual File ) ĊĠ Ġreturn Ġnew Section Ċ } Ċ