From a390509f87448e2848d17a71ccc8de3a6ff7ee90 Mon Sep 17 00:00:00 2001 From: KevinSchoenmayer Date: Tue, 6 Jan 2026 19:35:52 +0100 Subject: [PATCH] Fixed CLI to allow for full testing by using State Machines for everything, test for editing passes now --- .../executionHistory/executionHistory.bin | Bin 100819 -> 115270 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/8.14/fileHashes/fileHashes.bin | Bin 23747 -> 23797 bytes .gradle/8.14/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.14/fileHashes/resourceHashesCache.bin | Bin 20809 -> 21353 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes .../hhn/temp/project/AssignmentManager.class | Bin 4043 -> 4242 bytes .../test/hhn/temp/project/GoodCasesTest.class | Bin 10101 -> 9791 bytes build/jacoco/test.exec | Bin 53972 -> 53978 bytes build/reports/problems/problems-report.html | 2 +- .../hhn.temp.project.BadCasesTest.html | 12 +- .../hhn.temp.project.GoodCasesTest.html | 139 ++++--- build/reports/tests/test/index.html | 30 +- .../tests/test/packages/hhn.temp.project.html | 24 +- .../TEST-hhn.temp.project.BadCasesTest.xml | 10 +- .../TEST-hhn.temp.project.GoodCasesTest.xml | 122 ++++--- build/test-results/test/binary/results.bin | Bin 8204 -> 7182 bytes .../compileJava/previous-compilation-data.bin | Bin 884 -> 918 bytes .../stash-dir/GoodCasesTest.class.uniqueId0 | Bin 10116 -> 9791 bytes .../previous-compilation-data.bin | Bin 2054 -> 2054 bytes .../hhn/temp/project/AssignmentManager.java | 6 + .../java/hhn/temp/project/UserCommands.java | 338 +++++++++++++----- test/hhn/temp/project/GoodCasesTest.java | 4 +- 24 files changed, 436 insertions(+), 251 deletions(-) diff --git a/.gradle/8.14/executionHistory/executionHistory.bin b/.gradle/8.14/executionHistory/executionHistory.bin index 3497c16118d81287885a7f71a68dd288cb4dd0ac..1822e65ec1bc1b0233e5ecaa6851e4e55440e9b2 100644 GIT binary patch delta 3466 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 diff --git a/.gradle/8.14/executionHistory/executionHistory.lock b/.gradle/8.14/executionHistory/executionHistory.lock index 12a812dca264a81c5cb403a321c7db0ba5e65e57..7ce4ac521bd603e3d0a49596fb78897de20e3d0f 100644 GIT binary patch literal 17 UcmZSnb#-Tx%i?)c7$9IX07F{^+5i9m literal 17 UcmZSnb#-Tx%i?)c7$Bet07EJTsQ>@~ diff --git a/.gradle/8.14/fileHashes/fileHashes.bin b/.gradle/8.14/fileHashes/fileHashes.bin index 593de86ace9baf1404ce06af3fba21c0511c76cc..e5f38381ce989406689dbf4c4189dbf1d69e14c9 100644 GIT binary patch delta 1069 zcmX@Slkw|L#tkMCj9HsaB^;OpwgkQ1@ah%gat1JnIlMVnY85*Z7vo07AL1JgB=|Nv zdgw7Le7as?$(kFg5h;@sempE>EdvAN?B32kCx|ZI_nZ5@c^DN;v?qoym)Sj`B;Z^5 zm%5Y7K&qxpE1m;UB`|68ZXcj3r2?D!rPCBeo~Da0^{#)+15s6?22sU4ZSr$p7X=CL z4WEArJ(=h;ZJAH7!IgVpMSV&$A&O+CP4@OvW1ccad~=DPJ7c}yGW%xgg1Y% zO}e!hta^(08Hj2%dmyc63?wvxSP_H;)@)wZvGK^uTCNY9luyNS3qo}~0ZIY^2OE$; z)3IdboC8;%Wa!%H$8^qkpvrn6=A445?YQyIpx4Q7%tty)Z)21c*6U1n_H*Z8G?63mTrSuk~8^#fRuvxu9e!6Keuw|Wxb14 zlk8xGNkWX1*O+V>Sf=o0q5DnkOiryST?aHG+`KAL6$z}Ld_K@c;b;4;50jjkD%U@I zmvc?1UmH~szt-f$Xkl^5#+`NDpMELLnfP^j$@L>pHOZ4>gQOH5T?*Ux&_Q#(Vy8*q z%7@{;FiD70gg0)U9+b+)I(y2LDT0$3BkL3{34cCosPA$i?EL4)K{;^^VD;0Y5+Ul% zW=x(Rsm3y8T8Yr)laW3OTe6Ib&Y4O#U60$bqxRM}8HnlE6EJb5J+rOzw`Bsy7YVZ}R%gCx))Y-OrZ_tnq-m=&g#NVxkc&7Ll#9X$0nC32jci`7r<@k!c`!d2hG5M3AI{ra) Jusj0k000DtMy3D& delta 1016 zcmeymlkxCQ#tkMCjG3EFB^;PG_ew2dXX1RhQSpcPMgs%B&5j;=%nEsti-eOpMP-*b zvIITcBILlpz&N{ev9%-v81Qm#?)T{Qr6GCa>cMS-ze!+g`(YNX=a^w z>zC_7^QRhL+t3X&0isB7^5pY@E?$3@G&C&v9_IceYo=2{@!i*`iUdS39ri^b>)VN^ zY@CNK_FV1@eESco@1E7Ma~F=@0TZ0UI_)`Y+TY7bnk;RAT|A&Y;OBBYhOoe$9Rm zz5czMQB=rW{lU)Ju%J zF?HBq{>Q93w<+fReD0QAySUdQ>0kw_7E+q58B?ax9HZR!!e^znUuV7coEfqT5LNcT Mhz0?+G9aM`0GH%F7ytkO diff --git a/.gradle/8.14/fileHashes/fileHashes.lock b/.gradle/8.14/fileHashes/fileHashes.lock index ffde176c4d4c3245568ad7c6f820b2bbc809a30b..f44e5128370e78342b7f6399052f727d982933ae 100644 GIT binary patch literal 17 VcmZQJ+4?|x>8n?D3}C=~8UQ@I1-$?O literal 17 VcmZQJ+4?|x>8n?D3}C>_3jjO)1pfd4 diff --git a/.gradle/8.14/fileHashes/resourceHashesCache.bin b/.gradle/8.14/fileHashes/resourceHashesCache.bin index 2416311d7ebfb88c2427dfc5b8b39ec57e291d5f..77cc7861618c8437e3dff92e1e3639ce5db3655d 100644 GIT binary patch delta 656 zcmX@Pi1Fnz#tkMCj3JXvB`O3ucV})|8TT-V0Stm7Coh%A(3pMu@{)juY3Ct=fxZ8s zV1BKTY8kJ~Q>fzolUXHa2<)D>edTgS>6K8$*^{SAZV)&-=iIZWNoCCt!C=+Nwo;k= z1%b(_>e5%B3Oy&!l~NFRBv6)=Shv~_D!6{~R;d{R-zFt~@R5zlga`(iPj;1lAfU$S zpfUf}9%rba=ww+L1p)Ob7w@nA{&X!=@Zn@r8B2b#ilcu@uT?^g{5&~TW`=Joy6;@CFDw84L6P73vU8|}LRe5o8sO%4cyb~{fir@VA1R@yhKG{`HK_maVm%r++ z4||~6=fXmy=;c**FYAx1p^BL&$I3Y|v47mC_(Oc7frh|lM-L9pBx9hgBoGUNuz-}} z*=jSFbuATt6uC28!a+`#Lse03RQ&heoK^c;Ro}Za^O?zDs$gHCCtKQ?U7pL)f1_{5 z?Q4_o2ZRay$g_!6-_|?tQ_SMMKNe1Kp3E3%Qs0@dX>ZNW6B(|o$L7h}-<8EQ>x$%( zi|g+@imXwa_TM*!p9fQg!}jWk(+)F_XM9igHvFA@6;s8FTs%uve$a?d-T#L==8sL2yuJrfy>-`=l|RO_s-8vGo{jxKVQBA*oU`sk|^3O-QnnX zAgZ`VmCv?+&eT8kZ=gyGET6yTv}@h#73gQ zNIV!0nbCvZEcD4Zg?=?89x)Ee7{ajnP2646gHag)^b5##c?a4%jxL6>hH3&b^r0_^3k3boH*RexvAJI|2^9VX~kfIJA$<{_FZ zDCK*tsecFhmz2Dn?tW zPD|_6gly`PNBRyg6UdXJMy z3@m!nj)RN5xyhS{TplHFUQXdiQET^riO}L>Pns_$Ox%NhiHGUsya~oTvI=iI@%o6@ zPrRMP+x1_(Gf-2fCi9Y8X6f=!4_KJmE$`+mOK-V=mwcCz_{x0GjbKVo_Cn zi(2mL)zAl*g7n~c$U71kx1bIE8V-nbZBB~(u@HNrejFMAsklV(0{8A z{k6I^?Wl%f9MgZQ+iM3fs$oog&g}9I@9Xt-_U`WMvtSLzHJm`20#h(FG7}P!QyM1T zwwitzbXUeg!D$*Z;0%Ac$cBR0`&m85Y|pgv-Gnrb0lnVbqD<;R^TzNLcND|Ou^Q7j z$LD(PEJg{}6(b8BoEbQuL6FY?zt`|h;nP(44moc)F<_FT5C#e$1hv?LxM0jgh_Um_ zM4Up!vQ)*ss>%hbT*M`g0o`Y5a*LC#(tZ*0unwDPKZ#TocK}r3GOln}9vxoAHHmZ` zH>A#Yi?c)MflVk!nbgYXYM>&aRe`Wf&n%-xC=QC;#4Rc1%^YQ3BbkLg z!bCmu4fqoq{qc<=ChQ1VKjt_yq7gRS#vNLiWmJX1W~Sm@+>^R?t*I@ET0@Jqw74zB zUMlMSrS=}6OUkUxstfzxqw%vSUC{@WeMGkbU(n_>*-h0^`0XaU8pZwyEf{509jq&` zgIA#emDq_U8f}A7<8F zymaFGFDFm&OwiLoYO~s6Z5B>;t6!e7xLXxGkNrt-cLP;KS7(sJ7R7OqzgV|hWM%u2 g&Of}OF{rcf?Ns2L;^-6OIT#dvZ1m8f?BnL z2Npk}W0gYr2Uu2V6^8+W1P|~)L@mk-ycJKp#ar}s&uni}?AHD;)9+39_r0%sUcc_k zO(&LWr>_hQ0;r|+`?Yh9hyzCnIc>gRSB-disy&T?pg-)uF+%EEUuTyC#|id2UvPbo zf1Lv-2+m+2+}qaO)8+38yO4!_E@We$20LERaT1LLy~n?)d#m3Z<3bLaotS}_bi9mL z7~k0)>h%Re;U)g4 z-`DGJ^@Ukrt^;p#=LUapvjguQJe%=wTF!JH)6m!H-`pGM4u$QMVT7|5(==l+Ybs4O zPGnaf+?^e^jTo&_DS7NPMyE0=Kj<9kpvX84PO8+Y5RF-BG+uaKoeGf7-nGJ;s8hc5 zs)RRLr#$IhC%kH%MoDj)@TTjOE4`V*yI!Y}(yI~PY@J-vnowB5Nqwp5$G(vidg||efOzAZWuSqAJy>wcxQ8V3SrxqQDsMWZbd$N87fr#g@ zQVd+BlT*Ulg?Fn?n)GfH-Wr|KHf%W0Z_y1nae?2uIRNkD1NI0Xa<5H-XCX!Q>E2_ouR4s3 zr=i6-G#&*`GAE}}jHg7mh(6*@5$0n_`iV(uX!-SY-dL9Jt``sw2LP%qgog3>6rV9B zAI12bEgJ+&7Pl9<{epYG4C5PmN$vTFm*0dI_s3qnM&t`#5#Xq;vX&IONDcoctX+8Ri3DHmMfikiFN+ObU#~k zyNm8(I=j1k$h5l@olnuVCZ_v^>3+57LhjW}cV-yfQbkv%=%yv6yUcXIS#;IKRh_XM zSi||a79-HXY2(8vbjlpa;}qh}ir?`EBSpTL+5RWncG#NicrZQQ&;N@@|82!NRou+7 z^Ghlx$FhB%#SV(au7 z!2-9jWpst}5VU^mavkZ%PsD3|7~l`FJ?n+Ws0hFB=6$k*cgRlOe)nK5?!^+^ zhj!eLF6_cKJRsN2+@O6*YDh`-C6vnROEj6!2wrnhf}Z47Xl)UaT-p6_&6d_PY}H0( z4jQ4-ym8M0NAQ^St#|+j0G96^z;m+0nuqa3X=Nm~kS$8xB1>H^=8`Qz`5-Q7l&Zva zuryJ|Jj2Dg`|-T1$?G1#DG|A~Ew+R%SxzF4@ESe}7xr@1*{5=hiIkc=OU>1}L221G zQOvCcTEMN);4&w^(tQN&NAaQ!L!z1md#?&q$-}Kk!jff^>`ao%({nIApB#eT*in{S zGdu@Os)r<%S^G0hreSzKhZO$wupBb+dy?S!z*G4CIQTn~;Q9De_;~uaC&BY!tnl&l z_a(uLY7t$(Gja59OM>T%g2JDTgWsA2&-V_AKVDu|6FafDNR+5%;8WMEVZsuJB@O$3 ze2Y=>--r``QKl+7Ab2fTgy0OZ?=TAsh(SuwVJIC7OwF)A9a!+h5rLP%0cV^ delta 3387 zcmai0X>?OX6uviI@_3n&Hnd6Gq)F*Qp-@WMibkZCmQ4s$Dj*eYD1nBiEhc4A@zftG z`onX8=Q&E%AO2JSA)Fql3ZjU(9TyNqP*HJT02O!8JM&&9DJH%{dGCIi`M&$j%$<32 zaN)&(`r7580{}1+H|$oADJvadhXDuV!hizLB3K)Pk+sp#8U>z5utmbLzU95qu23}Q zfIQyM0Rt*n;ShrtVG#n0hPrz!_!fe)v1e_#Cmick;2mm@$H#~j+7j+l;5`JjBN__!g<69#Qps1~18VFH zMK&n#;hw`I9?Hs_L4BIHbc8nag?oEqR^8{+)=mv(lgtDtH)WYhDMcCNr#b()HhBLEwGL{BE-Ech5cA%t*-S}oLf zg0rNa_f-i2)v1jNG0~qH{XeBPuJ)PWer|B@b~d$hu9GtJrwT6mR|sWL1e2jy=#)YR zwM{W}R2TchaEwEY@h}i{07-MJ`J8M3Fnmca8L2 zE`2-G`~I2af6?W47H=iByNb(`)VicvP^z`2SG!1RzZ$b}ws;lEHM*1K7D~BBDK{;> z+;1fJyCL_KyO!imy4`d6q&lfeXdA&F@F(@*Sg+>4D7JznV1*sosaE}O>V3&j^m|%J z@j*}3B(A9MiUva`MI~M)>Ob+Zc_Kt@DXCqOD3~@mwiY?IrnF-t(};8s(>P91_T$F7 zMzyy~8k8Z}2lV%t=Jt-Z55ax`c2hSCoYn$fU+X-$7goT1&b;;2!ZycqgYcvgyNBQz0FH;?fQG)poP)zmjqz0_Rn1aq zV!mM_A7)`@nmvwLWFp%zvBOu=|AHe>O$lG(8CsVcTla^n>NUi-^`-3qMAUS)W61PIc&`T;bjaZTq45umzH`>PP3Uq)ZMY6L%ys z;Rq7Rq*16OPiHol*AA8D`;XF$CH(73JB5;7ZaKQrFg|?&48FH6addAtVbNFQf3t2g z;q%QDcl|~R*Y}w4>EkE)gDLoTnDFUSD*35q?RFDBeV7e?@~mw!VbRAuo>glvQj0JsIO7A0(kE7|gu{e(Y z>(K-m)yinHjHbzG29E7FD1Q0lwKBR+MoluBE29N6S|p<-6fLFW?3XFHA}Kg-!r7lOZn^lYc`Bv&}F)1OW)M3pLmX3JpeP0tzW~KmZ?;8nqn{ zBrz1LstOU8@m(Gc;We)v65lnR=I#!dfqySTsaRerlU>Gfv(78klOaKvHmU|bf XztlpLurnW%P_G7)30@VmS-N`|s#KLs delta 329 zcmV-P0k;0yr32KZ11|xpGn~9@C zQUCw}n~9@Pg|RN{5(wCR225-6t*Vn#KO_e#|KI<=_W-jP6IUIxu`p%?0T{CwHP{HV z9zHDrvwuI)9|+?KQ*YHs0Lhchp&$)k|NsC0KmY%K{CEF9vrk{&4+7s!voLRX3J5hR ze-ldA+PjlWxhew<{2#NYdFmA_4ao{C-*iGX02^;|XD@GXWo~q3b96LnFIHh}b!As_ zVQ_F|av}`)eF6frkdNR30spgck~|6qZ(D!#5D>GooDv1I`=Lh*4*&iF5i&Oj*&$9e z function configurationCacheProblems() { return ( // begin-report-data -{"diagnostics":[{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('exceptionFormat = ') instead."}]]}],"problemsReport":{"totalProblemCount":1,"buildName":"Template","requestedTasks":"test","documentationLink":"https://docs.gradle.org/8.14/userguide/reporting_problems.html","documentationLinkCaption":"Problem report","summaries":[]}} +{"diagnostics":[{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('exceptionFormat = ') instead."}]]}],"problemsReport":{"totalProblemCount":1,"buildName":"Template","requestedTasks":"jacocoTestReport","documentationLink":"https://docs.gradle.org/8.14/userguide/reporting_problems.html","documentationLinkCaption":"Problem report","summaries":[]}} // end-report-data );} diff --git a/build/reports/tests/test/classes/hhn.temp.project.BadCasesTest.html b/build/reports/tests/test/classes/hhn.temp.project.BadCasesTest.html index f736b509..2e827fd4 100644 --- a/build/reports/tests/test/classes/hhn.temp.project.BadCasesTest.html +++ b/build/reports/tests/test/classes/hhn.temp.project.BadCasesTest.html @@ -41,7 +41,7 @@
-
0.021s
+
0.016s

duration

@@ -87,7 +87,7 @@ Assert only existing tasks can be edited assertEditOnlyExistingTasks() -0.004s +0.003s passed @@ -99,19 +99,19 @@ Assert List isn't empty after adding a task assertListNowEmptyAfterAdd() -0.004s +0.002s passed Assert that added tasks can't be Null assertNewTasksAreNotNull() -0.003s +0.002s passed Assert that Remove Task is programmed defensively assertRemoveTaskOnlyAcceptsValidParameters() -0.002s +0.001s passed @@ -143,7 +143,7 @@ Generated by -Gradle 8.14 at 04.01.2026, 16:32:20

+Gradle 8.14 at 06.01.2026, 19:34:44

diff --git a/build/reports/tests/test/classes/hhn.temp.project.GoodCasesTest.html b/build/reports/tests/test/classes/hhn.temp.project.GoodCasesTest.html index 34111ba9..853b19ce 100644 --- a/build/reports/tests/test/classes/hhn.temp.project.GoodCasesTest.html +++ b/build/reports/tests/test/classes/hhn.temp.project.GoodCasesTest.html @@ -29,7 +29,7 @@
-
2
+
1

failures

@@ -41,7 +41,7 @@
-
0.051s
+
0.085s

duration

@@ -51,7 +51,7 @@
-
84%
+
92%

successful

@@ -73,24 +73,6 @@

Failed tests

- -

Check that editing is possible through UI

- -
org.opentest4j.AssertionFailedError: expected: <Walk> but was: <Run>
-	at app//org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
-	at app//org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
-	at app//org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197)
-	at app//org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
-	at app//org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177)
-	at app//org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1141)
-	at app//hhn.temp.project.GoodCasesTest.assertEditingTasksIsPossibleThroughUi(GoodCasesTest.java:133)
-	at java.base@17.0.2/java.lang.reflect.Method.invoke(Method.java:568)
-	at java.base@17.0.2/java.util.ArrayList.forEach(ArrayList.java:1511)
-	at java.base@17.0.2/java.util.ArrayList.forEach(ArrayList.java:1511)
-
-
-
-

Assert that removing a worker removes the worker from the worker list

@@ -121,7 +103,7 @@ Check that every required surface command actually works assertCommandsAreRecognized() -0.004s +0.017s passed @@ -131,51 +113,51 @@ passed -Check that editing is possible through UI -assertEditingTasksIsPossibleThroughUi() -0.008s -failed +Check that editing is possible through UI +assertEditingTasksIsPossibleThroughUi() +0.014s +passed Assert existing Tasks can be edited assertExistingTasksCanBeEdited() -0.003s +0.001s passed Check that every task command works assertFinishingTasksIsPossibleThroughUi() -0.005s +0.008s passed Check Getters assertGettersWorkCorrectly() -0.014s +0.019s passed Assert that removing a worker removes the worker from the worker list assertRemoveWorkerActuallyRemoves() -0.005s +0.012s failed Assert that removing Workers is possible through the UI assertRemovingWorkersIsPossibleThroughUI() -0.002s +0.005s passed Assert that the Scanner is actually started when AM calls start assertScannerExists() -0.002s +0.001s passed Assert that Task State is actually changed when submitted as finished assertTaskStateChanges() -0.004s +0.002s passed @@ -187,7 +169,7 @@ Assert that a Worker can add a Task assertWorkerCanAddTask() -0.001s +0.003s passed @@ -201,35 +183,74 @@

Standard output

-
Enter task ID: Error: Cannot invoke "java.util.Scanner.nextLine()" because "this.scanner" is null
-Enter new name;description: Error: Cannot invoke "java.util.Scanner.nextLine()" because "this.scanner" is null
-Unknown command. Type 'help' for available commands.
-Available commands:
-  createWorker  - Create a new worker
-  createTask    - Create a new task
-  selectTask    - Select a task to work with
-  listWorkers   - List all workers
-  help/?        - Show this help
-  exit          - Exit the program
-Available commands:
-  createWorker  - Create a new worker
-  createTask    - Create a new task
-  selectTask    - Select a task to work with
-  listWorkers   - List all workers
-  help/?        - Show this help
-  exit          - Exit the program
-Enter worker name: Error: Cannot invoke "java.util.Scanner.nextLine()" because "this.scanner" is null
-Enter worker ID: Error: Cannot invoke "java.util.Scanner.nextLine()" because "this.scanner" is null
-Enter task ID: Error: Cannot invoke "java.util.Scanner.nextLine()" because "this.scanner" is null
-Unknown command. Type 'help' for available commands.
-Unknown command. Type 'help' for available commands.
-Enter task ID: Error: Cannot invoke "java.util.Scanner.nextLine()" because "this.scanner" is null
+
Enter task ID:
+Task 1 (Run) selected
+Commands: finish, unfinish, remove, edit, back
+Enter new name;description:
+Task edited
+=== Available Commands ===
+General:
+  help, ? - Show this help
+  exit - Exit the program
+  listworkers - List all workers and select one
+  selecttask - Select a task by ID
+  createtask - Create a new task
+  createworker - Create a new worker
+  listtasks - List all tasks
+  listunfinished - List unfinished tasks
+  listfinished - List finished tasks
+
+When a task is selected:
+  finish - Mark task as finished
+  unfinish - Mark task as unfinished
+  remove - Remove the task
+  edit - Edit task name and description
+  back - Return to main menu
+
+When a worker is selected:
+  remove - Remove the worker
+  back - Return to main menu
+=== Available Commands ===
+General:
+  help, ? - Show this help
+  exit - Exit the program
+  listworkers - List all workers and select one
+  selecttask - Select a task by ID
+  createtask - Create a new task
+  createworker - Create a new worker
+  listtasks - List all tasks
+  listunfinished - List unfinished tasks
+  listfinished - List finished tasks
+
+When a task is selected:
+  finish - Mark task as finished
+  unfinish - Mark task as unfinished
+  remove - Remove the task
+  edit - Edit task name and description
+  back - Return to main menu
+
+When a worker is selected:
+  remove - Remove the worker
+  back - Return to main menu
+Enter worker name:
+Created worker with ID: 1
+Enter task ID:
+Invalid input. Please enter a task ID or 'back':
+Invalid input. Please enter a task ID or 'back':
+Enter task ID:
+Task 1 (Run) selected
+Commands: finish, unfinish, remove, edit, back
 Task marked as finished
 Task marked as unfinished
 Task removed
 Unknown command. Type 'help' for available commands.
 Unknown command. Type 'help' for available commands.
-Enter worker ID: Error: Cannot invoke "java.util.Scanner.nextLine()" because "this.scanner" is null
+Available workers:
+  1: Alfred
+  2: Balfred
+Enter worker ID to select (or 'back'):
+Worker 1 (Alfred) selected
+Commands: remove, back
 Worker removed
 Unknown command. Type 'help' for available commands.
 Unknown command. Type 'help' for available commands.
@@ -244,7 +265,7 @@ Unknown command. Type 'help' for available commands.
 
 
 
Generated by -Gradle 8.14 at 04.01.2026, 16:32:20

+Gradle 8.14 at 06.01.2026, 19:34:44

diff --git a/build/reports/tests/test/index.html b/build/reports/tests/test/index.html index ac37d130..f5786cff 100644 --- a/build/reports/tests/test/index.html +++ b/build/reports/tests/test/index.html @@ -26,7 +26,7 @@
-
5
+
4

failures

@@ -38,7 +38,7 @@
-
1.810s
+
1.063s

duration

@@ -48,7 +48,7 @@
-
80%
+
84%

successful

@@ -84,10 +84,6 @@
  • GoodCasesTest. -Check that editing is possible through UI -
  • -
  • -GoodCasesTest. Assert that removing a worker removes the worker from the worker list
  • @@ -111,10 +107,10 @@ hhn.temp.project 25 -5 +4 0 -1.810s -80% +1.063s +84% @@ -140,7 +136,7 @@ 8 0 0 -0.021s +0.016s 100% @@ -150,7 +146,7 @@ 1 0 0 -0.027s +0.070s 100% @@ -160,7 +156,7 @@ 3 3 0 -1.711s +0.892s 0% @@ -168,10 +164,10 @@ hhn.temp.project.GoodCasesTest 13 -2 +1 0 -0.051s -84% +0.085s +92% @@ -184,7 +180,7 @@ Generated by -Gradle 8.14 at 04.01.2026, 16:32:20

    +Gradle 8.14 at 06.01.2026, 19:34:44

    diff --git a/build/reports/tests/test/packages/hhn.temp.project.html b/build/reports/tests/test/packages/hhn.temp.project.html index 0b27113d..b3490be6 100644 --- a/build/reports/tests/test/packages/hhn.temp.project.html +++ b/build/reports/tests/test/packages/hhn.temp.project.html @@ -28,7 +28,7 @@
    -
    5
    +
    4

    failures

    @@ -40,7 +40,7 @@
    -
    1.810s
    +
    1.063s

    duration

    @@ -50,7 +50,7 @@
    -
    80%
    +
    84%

    successful

    @@ -83,10 +83,6 @@
  • GoodCasesTest. -Check that editing is possible through UI -
  • -
  • -GoodCasesTest. Assert that removing a worker removes the worker from the worker list
  • @@ -111,7 +107,7 @@ 8 0 0 -0.021s +0.016s 100% @@ -121,7 +117,7 @@ 1 0 0 -0.027s +0.070s 100% @@ -131,7 +127,7 @@ 3 3 0 -1.711s +0.892s 0% @@ -139,10 +135,10 @@ GoodCasesTest 13 -2 +1 0 -0.051s -84% +0.085s +92% @@ -154,7 +150,7 @@ Generated by -Gradle 8.14 at 04.01.2026, 16:32:20

    +Gradle 8.14 at 06.01.2026, 19:34:44

    diff --git a/build/test-results/test/TEST-hhn.temp.project.BadCasesTest.xml b/build/test-results/test/TEST-hhn.temp.project.BadCasesTest.xml index 2715170c..9f98525e 100644 --- a/build/test-results/test/TEST-hhn.temp.project.BadCasesTest.xml +++ b/build/test-results/test/TEST-hhn.temp.project.BadCasesTest.xml @@ -1,14 +1,14 @@ - + - + - + - + - + diff --git a/build/test-results/test/TEST-hhn.temp.project.GoodCasesTest.xml b/build/test-results/test/TEST-hhn.temp.project.GoodCasesTest.xml index 28baa303..68e169e9 100644 --- a/build/test-results/test/TEST-hhn.temp.project.GoodCasesTest.xml +++ b/build/test-results/test/TEST-hhn.temp.project.GoodCasesTest.xml @@ -1,29 +1,16 @@ - + - - - org.opentest4j.AssertionFailedError: expected: <Walk> but was: <Run> - at app//org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151) - at app//org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132) - at app//org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197) - at app//org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182) - at app//org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177) - at app//org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1141) - at app//hhn.temp.project.GoodCasesTest.assertEditingTasksIsPossibleThroughUi(GoodCasesTest.java:133) - at java.base@17.0.2/java.lang.reflect.Method.invoke(Method.java:568) - at java.base@17.0.2/java.util.ArrayList.forEach(ArrayList.java:1511) - at java.base@17.0.2/java.util.ArrayList.forEach(ArrayList.java:1511) - - - + + + - - - - - + + + + + org.opentest4j.AssertionFailedError: Expected java.lang.IllegalArgumentException to be thrown, but nothing was thrown. at app//org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:152) at app//org.junit.jupiter.api.AssertThrows.assertThrows(AssertThrows.java:73) @@ -35,38 +22,77 @@ at java.base@17.0.2/java.util.ArrayList.forEach(ArrayList.java:1511) - - + + - jNFD$9XBy`+(Xr2!NP3>QOv=EsrUh^VxaL)`HUEWF5_4{Sz5r9 z(+#Ti<>W{KLy&OWq$yysw4@h^5i&VbGLVx4Djzrbu%rXr0ZEg2q|!K9 zp>mm%tED`6V2;mb;9oNNf~?Zyk5ZnTJWwSSlk-JXH)lv+WQKdPda{#zGCU;eCa;r^ KWCdE=!~g(?MUU$M delta 787 zcmeCP=y90f!qU0e(_o@U7*9JZ0|Vpi&c)u_8K+G=D9ZS7;sJMNBV&`v^V!51?@U%? z1oJk}XH#X~+|T05$Sn_5e;teZ`$+2jS$H}*AZq;|Vp01LNiERqdwfQWKt}~cP8Ja` z<&=hK3@Di#Bwz>g73$D$3@>!uekZ{0ce_EC%v}O7rZ_@B!7T$`epE zIZ7gq$xstW*>O1LrG#V@<(E&MAtBFfYy=Wi*K#c^P0T6QOH0hm@yjm(^E4cbi&Kjr z>|(vF#Ii&yLrZfM<%vituqn5In63#mose>K^U0Bt#!?W~Q1deL^I(=6noM3MX*5|_ zL_y3wKR?Aeu{gCjB(=B%>NaEJ$$?U`lhvhmPtFvHghvJQIr*Ge9yd&%JS3JjXNg~A=7FUP dB?iHnlP?H~O^%gDBnI`#8>Ayyffj2q002$;{15;D diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index cbf02507461b56e7b6fbd0dd412255070ce6e401..f0c183506ecc382a41d602ca35153926523820a5 100644 GIT binary patch delta 601 zcmeyuHjSN;dm>|qfQk0R@Z~bQCzJ$yEB{h=a@oYxFntvXXUR}TDTbEf)FNqyj{Mx* z#JrSZ8HOf9f#vTG{93CVUy*lTMp!2%f0ArCquj)O67}-F3NAuoJOa<&9$Gci{L}L^ zmQA6dMtQZ0!AhRWDiZ7}46S(ur6sBittE*isRH%u-uX?K7hIq8mc_0h{%*B`z?6vP z@3iZpZ!n58Woc|^nXVShpem5I{K*r>Nk9I#T^F63c=xingus?8qoQ-B(oNUncI>FV z^-YG8fss*yk+YtGlaY~^QG!7h%w>>gWMJfHPymwh3=)h?;);x%3~G#woQw<%;y@J) z42nQOAjQxC#Bk66W3i|^YPf3ZY3XU}=`ge;=jZA&w5R9ir{|>VF?1Fb<(K3qm8P-l zGxSsxq!wl7rsm0(B<2_}G#6wFbnjYo@Ojt0NR`zB|JM5Xd^B{|G@AT}QCiVh&qU8u z&rDCpoS`kZvbZqEf}uG%%aWm^A|&vpQlGq%$&k?yNLtj}>p6rw>O1K>>$9-3vCFwIv}PriB?7&`DC?@{ z=Iid_5$vh&rSBxdE-J?30utx<*7FJW4RPd91#{K>^nAe#27kQ(7f&%TTOm*{$k&k% u%;pW&3-JwgbmWF;=M2*e_YHusQ$Y6**`5P(}rYmg3YR zMTU<2+}y;xlwx)zhSt1-(h_Bc){?}MRDtFg<+c|-E4BSP>$T_1kX4Wpm=dx4opxRH z4MuUMER78<_0v^?8I%RmmOpvIIO)g#w(FvE6YpLYmlH_)HTyyI`uA=|QHj2jf;L>_ zU|?jFW8`GuWMt%Jlw%NQWB_s`fh0eJ6p)l;kYi+&1`4S#GIBC9Fh~PcGcYhT05Kdi zz*sD*j%u#zdK!9~dd^x5Ey?-0+6?XK`T6NNsX7du1x5KK`AMZ|?79p+6$Pn9nYpQX zC5btD49x|Z0^PgT9DLq&FH&W-z`wPAJ|Fen)eR=gGD#~M>KW-7>zU|jnKHEHRu&iL zm@zabXPGl}RHUSqB^G2_OpaudSFqHx(zDhxwqaFj418wMFmaY-#iQ*v#rT zOsbPlF&Q%I14)Z|TRppQdwmCeM|~DnHg*XohSsdavP7U47{#6STzp+!+=AWpJ@g$! z*hR&7oIv9Io_b!v-XZoJ%3!XFkDfP}!QiXs=i)8~W=r|&1^C+Yf!Vx)dO^Oyj`rLT h?VKTcp}u|)wq%%yUbu5asJ((BNGX$?G%!pV7yxgCpkDw0 diff --git a/build/tmp/compileTestJava/compileTransaction/stash-dir/GoodCasesTest.class.uniqueId0 b/build/tmp/compileTestJava/compileTransaction/stash-dir/GoodCasesTest.class.uniqueId0 index d33dc2b5716e163559eab61d586b315927fcc882..9a36c568179e17e9a3a7f15f8f25a3fa75f5520d 100644 GIT binary patch literal 9791 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 PT@gEQo~6>t#@7D>g5!0) literal 10116 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 diff --git a/build/tmp/compileTestJava/previous-compilation-data.bin b/build/tmp/compileTestJava/previous-compilation-data.bin index 4c6bbf6f89ed4254fee450a244fbef18f9551f55..58f361589d6209f6b62064024954dd7ca17c2314 100644 GIT binary patch delta 70 zcmV-M0J;B$5QY$t*bq*pKjvTt^PnJCgYZ3K+M}`P>;Vutz@|Bl_iK?7^6QNPqzf9O c;VvF`kUZeukS`OT47C+Qn1mZ c "); } @@ -89,73 +111,90 @@ public class UserCommands implements Runnable { } try { - if (inTaskSelection) { - handleTaskSelectionInput(input); - } else if (inWorkerSelection) { - handleWorkerSelectionInput(input); - } else { - handleMainMenuInput(input); + switch (currentState) { + case MAIN_MENU: + handleMainMenuInput(input); + break; + case TASK_SELECTED: + handleTaskSelectionInput(input); + break; + case WORKER_SELECTED: + handleWorkerSelectionInput(input); + break; + case AWAITING_EDIT_INPUT: + handleEditInput(input); + break; + case AWAITING_CREATE_TASK_WORKER: + handleCreateTaskWorkerInput(input); + break; + case AWAITING_CREATE_TASK_NAME: + handleCreateTaskNameInput(input); + break; + case AWAITING_CREATE_TASK_DESC: + handleCreateTaskDescInput(input); + break; + case AWAITING_CREATE_WORKER_NAME: + handleCreateWorkerNameInput(input); + break; + case AWAITING_TASK_SELECTION: + handleTaskIdInput(input); + break; } } catch (Exception e) { System.out.println("Error: " + e.getMessage()); + resetToMainMenu(); } } private void showHelp() { - if (inTaskSelection && selectedTaskId != null) { - System.out.println("Task commands:"); - System.out.println(" finish - Mark task as finished"); - System.out.println(" unfinish - Mark task as unfinished"); - System.out.println(" remove - Remove this task"); - System.out.println(" edit - Edit task (prompts for name;description)"); - System.out.println(" back - Return to main menu"); - } else if (inWorkerSelection && selectedWorkerId != null) { - System.out.println("Worker commands:"); - System.out.println(" remove - Remove this worker"); - System.out.println(" back - Return to main menu"); - } else { - System.out.println("Available commands:"); - System.out.println(" createWorker - Create a new worker"); - System.out.println(" createTask - Create a new task"); - System.out.println(" selectTask - Select a task to work with"); - System.out.println(" listWorkers - List all workers"); - System.out.println(" help/? - Show this help"); - System.out.println(" exit - Exit the program"); - } + System.out.println("=== Available Commands ==="); + System.out.println("General:"); + System.out.println(" help, ? - Show this help"); + System.out.println(" exit - Exit the program"); + System.out.println(" listworkers - List all workers and select one"); + System.out.println(" selecttask - Select a task by ID"); + System.out.println(" createtask - Create a new task"); + System.out.println(" createworker - Create a new worker"); + System.out.println(" listtasks - List all tasks"); + System.out.println(" listunfinished - List unfinished tasks"); + System.out.println(" listfinished - List finished tasks"); + + System.out.println("\nWhen a task is selected:"); + System.out.println(" finish - Mark task as finished"); + System.out.println(" unfinish - Mark task as unfinished"); + System.out.println(" remove - Remove the task"); + System.out.println(" edit - Edit task name and description"); + System.out.println(" back - Return to main menu"); + + System.out.println("\nWhen a worker is selected:"); + System.out.println(" remove - Remove the worker"); + System.out.println(" back - Return to main menu"); } private void handleMainMenuInput(String input) { switch (input.toLowerCase()) { case "createworker": - System.out.print("Enter worker name: "); - String workerName = scanner.nextLine().trim(); - int workerId = manager.createWorker(workerName); - System.out.println("Created worker with ID: " + workerId); + System.out.println("Enter worker name:"); + currentState = InputState.AWAITING_CREATE_WORKER_NAME; break; case "createtask": - System.out.print("Enter worker ID: "); - int workerIdForTask = Integer.parseInt(scanner.nextLine().trim()); - System.out.print("Enter task name: "); - String taskName = scanner.nextLine().trim(); - System.out.print("Enter task description: "); - String taskDesc = scanner.nextLine().trim(); - int taskId = manager.addTask(workerIdForTask, taskName, taskDesc); - System.out.println("Created task with ID: " + taskId); + System.out.println("Enter worker ID:"); + currentState = InputState.AWAITING_CREATE_TASK_WORKER; break; case "selecttask": - inTaskSelection = true; - System.out.print("Enter task ID: "); - String taskIdInput = scanner.nextLine().trim(); - selectedTaskId = Integer.parseInt(taskIdInput); + System.out.println("Enter task ID:"); + currentState = InputState.AWAITING_TASK_SELECTION; // Change to new state break; case "listworkers": - inWorkerSelection = true; - System.out.print("Enter worker ID: "); - String workerIdInput = scanner.nextLine().trim(); - selectedWorkerId = Integer.parseInt(workerIdInput); + System.out.println("Available workers:"); + for (Worker w : manager.getWorkerMap().values()) { + System.out.println(" " + w.getId() + ": " + w.getName()); + } + System.out.println("Enter worker ID to select (or 'back'):"); + currentState = InputState.WORKER_SELECTED; break; default: @@ -163,86 +202,187 @@ public class UserCommands implements Runnable { } } + private void handleWorkerSelectionInput(String input) { + if ("back".equalsIgnoreCase(input)) { + resetToMainMenu(); + return; + } + + try { + int workerId = Integer.parseInt(input.trim()); + Worker worker = manager.getWorker(workerId); + if (worker != null) { + selectedWorkerId = workerId; + System.out.println("Worker " + workerId + " (" + worker.getName() + ") selected"); + System.out.println("Commands: remove, back"); + } else { + System.out.println("Worker not found. Please enter a valid worker ID:"); + } + } catch (NumberFormatException e) { + if (selectedWorkerId != null) { + handleWorkerCommand(input); + } else { + System.out.println("Invalid input. Please enter a worker ID or 'back':"); + } + } + } + + private void handleWorkerCommand(String input) { + switch (input.toLowerCase()) { + case "remove": + manager.removeWorker(selectedWorkerId); + System.out.println("Worker removed"); + resetToMainMenu(); + break; + + case "back": + resetToMainMenu(); + break; + + default: + System.out.println("Unknown command. Available commands: remove, back"); + } + } + + private void handleCreateWorkerNameInput(String input) { + int workerId = manager.createWorker(input.trim()); + System.out.println("Created worker with ID: " + workerId); + resetToMainMenu(); + } + private void handleTaskIdInput(String input) { + if ("back".equalsIgnoreCase(input)) { + resetToMainMenu(); + return; + } + + try { + int taskId = Integer.parseInt(input.trim()); + Task task = manager.getTask(taskId); + if (task != null) { + selectedTaskId = taskId; + currentState = InputState.TASK_SELECTED; + System.out.println("Task " + taskId + " (" + task.getName() + ") selected"); + System.out.println("Commands: finish, unfinish, remove, edit, back"); + } else { + System.out.println("Task not found. Please enter a valid task ID:"); + } + } catch (NumberFormatException e) { + System.out.println("Invalid input. Please enter a task ID or 'back':"); + } + } + + + private void handleCreateTaskWorkerInput(String input) { + try { + tempWorkerId = Integer.parseInt(input.trim()); + System.out.println("Enter task name:"); + currentState = InputState.AWAITING_CREATE_TASK_NAME; + } catch (NumberFormatException e) { + System.out.println("Invalid worker ID. Please enter a number:"); + } + } + + private void handleCreateTaskNameInput(String input) { + tempTaskName = input.trim(); + System.out.println("Enter task description:"); + currentState = InputState.AWAITING_CREATE_TASK_DESC; + } + + private void handleCreateTaskDescInput(String input) { + int taskId = manager.addTask(tempWorkerId, tempTaskName, input.trim()); + System.out.println("Created task with ID: " + taskId); + resetToMainMenu(); + } + + private void resetToMainMenu() { + currentState = InputState.MAIN_MENU; + selectedTaskId = null; + selectedWorkerId = null; + tempWorkerId = null; + tempTaskName = null; + } + private void handleTaskSelectionInput(String input) { + if ("back".equalsIgnoreCase(input)) { + resetToMainMenu(); + return; + } + + try { + int taskId = Integer.parseInt(input.trim()); + Task task = manager.getTask(taskId); + if (task != null) { + selectedTaskId = taskId; + currentState = InputState.TASK_SELECTED; + System.out.println("Task " + taskId + " (" + task.getName() + ") selected"); + System.out.println("Commands: finish, unfinish, remove, edit, back"); + } else { + System.out.println("Task not found. Please enter a valid task ID:"); + } + } catch (NumberFormatException e) { + if (selectedTaskId != null) { + handleTaskCommand(input); + } else { + System.out.println("Invalid input. Please enter a task ID or 'back':"); + } + } + } + + private void handleTaskCommand(String input) { switch (input.toLowerCase()) { case "finish": - manager.finishTask(manager.getTask(selectedTaskId).getWorkerId(), selectedTaskId); + manager.finishTask(manager.getTask(selectedTaskId).getWorkerId(),selectedTaskId); System.out.println("Task marked as finished"); break; case "unfinish": - manager.unfinishTask(manager.getTask(selectedTaskId).getWorkerId(), selectedTaskId); + manager.unfinishTask(manager.getTask(selectedTaskId).getWorkerId(),selectedTaskId); System.out.println("Task marked as unfinished"); break; case "remove": manager.removeTask(selectedTaskId); System.out.println("Task removed"); - resetSelection(); + resetToMainMenu(); break; case "edit": - System.out.print("Enter new name;description: "); - String editInput = scanner.nextLine().trim(); - String[] parts = editInput.split(";", 2); - if (parts.length == 2) { - manager.editTask(manager.getTask(selectedTaskId).getWorkerId(),selectedTaskId,parts[0],parts[1]); - System.out.println("Task edited"); - } else { - System.out.println("Invalid format. Use: name;description"); - } + System.out.println("Enter new name;description:"); + currentState = InputState.AWAITING_EDIT_INPUT; break; case "back": - resetSelection(); + resetToMainMenu(); break; default: - try { - selectedTaskId = Integer.parseInt(input); - } catch (NumberFormatException e) { - System.out.println("Unknown command. Type 'help' for available commands."); - } + System.out.println("Unknown command. Type 'help' for available commands."); } } - private void handleWorkerSelectionInput(String input) { - switch (input.toLowerCase()) { - case "remove": - manager.removeWorker(selectedWorkerId); - System.out.println("Worker removed"); - resetSelection(); - break; - - case "back": - resetSelection(); - break; - - default: - try { - selectedWorkerId = Integer.parseInt(input); - } catch (NumberFormatException e) { - System.out.println("Unknown command. Type 'help' for available commands."); - } + private void handleEditInput(String input) { + String[] parts = input.split(";", 2); + if (parts.length == 2) { + manager.editTask(manager.getTask(selectedTaskId).getWorkerId(), selectedTaskId, parts[0], parts[1]); + System.out.println("Task edited"); + } else { + System.out.println("Invalid format. Use: name;description"); + System.out.println("Please try again:"); + return; } - } - - private void resetSelection() { - inTaskSelection = false; - inWorkerSelection = false; - selectedTaskId = null; - selectedWorkerId = null; + currentState = InputState.TASK_SELECTED; } public Scanner getScanner() { return scanner; } - // For testing - allows setting scanner + //only for testing public void setScanner(Scanner scanner) { this.scanner = scanner; } + //only for testing public boolean isRunning() { return running.get(); } diff --git a/test/hhn/temp/project/GoodCasesTest.java b/test/hhn/temp/project/GoodCasesTest.java index 3dabeaf9..6f9cd642 100644 --- a/test/hhn/temp/project/GoodCasesTest.java +++ b/test/hhn/temp/project/GoodCasesTest.java @@ -129,10 +129,10 @@ public class GoodCasesTest { manager.getUserCommands().handleInput("selectTask"); manager.getUserCommands().handleInput(taskId + ""); manager.getUserCommands().handleInput("edit"); - assertDoesNotThrow(() -> manager.getUserCommands().handleInput("Walk;Walk 3 Miles")); + manager.getUserCommands().handleInput("Walk;Walk 3 Miles"); assertEquals("Walk", manager.getTask(taskId).getName()); assertEquals("Walk 3 Miles", manager.getTask(taskId).getDescription()); - assertDoesNotThrow(() -> manager.getUserCommands().handleInput("back")); + manager.getUserCommands().handleInput("back"); } @Test @DisplayName("Assert that removing Workers is possible through the UI")