From 6ffc322932ce212b6c8ca2069243c14d281ddd05 Mon Sep 17 00:00:00 2001
From: Arnaud LABOUREL <arnaud.labourel@lis-lab.fr>
Date: Thu, 16 Jan 2025 16:56:11 +0100
Subject: [PATCH] Update projet 2024

---
 TP1/.gitignore                                |  18 +++-----
 TP1/README.md                                 |  17 ++++---
 TP1/build.gradle                              |  24 ----------
 TP1/build.gradle.kts                          |  30 ++++++++++++
 {TP3 => TP1}/gradle.properties                |   0
 TP1/gradle/wrapper/gradle-wrapper.jar         | Bin 60756 -> 59821 bytes
 TP1/gradle/wrapper/gradle-wrapper.properties  |   3 +-
 TP1/gradlew                                   |  20 ++++++--
 TP1/settings.gradle                           |   2 +-
 .../src/main/java/complex/Complex.java        |   0
 .../src/main/java/deque/DoubleEndedQueue.java |   0
 .../src/main/java/palindrome/Palindrome.java  |   0
 .../partial_coverage/PartialCoverage.java     |   0
 .../src/test/java/complex/ComplexTest.java    |   0
 .../test/java/palindrome/PalindromeTest.java  |   0
 TP2/README.md                                 |  10 +++-
 TP2/build.gradle                              |  42 -----------------
 TP2/build.gradle.kts                          |  43 ++++++++++++++++++
 TP2/gradle/wrapper/gradle-wrapper.properties  |   2 +-
 TP2/settings.gradle                           |   2 +-
 {TP1/images => TP2/src/main/java}/.gitkeep    |   0
 {TP3/src/main => TP2/src/test}/java/.gitkeep  |   0
 TP3/.gitignore                                |  18 +++++---
 TP3/README.md                                 |  23 +++-------
 TP3/build.gradle                              |  43 ------------------
 TP3/build.gradle.kts                          |  23 ++++++++++
 {TP1 => TP3}/executables/check00exe           | Bin
 {TP1 => TP3}/executables/check01exe           | Bin
 {TP1 => TP3}/executables/check02exe           | Bin
 {TP1 => TP3}/executables/check03exe           | Bin
 {TP1 => TP3}/executables/check04exe           | Bin
 {TP1 => TP3}/executables/check05exe           | Bin
 {TP1 => TP3}/executables/check06exe           | Bin
 {TP1 => TP3}/executables/check07exe           | Bin
 {TP1 => TP3}/executables/check08exe           | Bin
 {TP1 => TP3}/executables/check09exe           | Bin
 {TP1 => TP3}/executables/check10exe           | Bin
 {TP1 => TP3}/executables/check11exe           | Bin
 TP3/gradle/wrapper/gradle-wrapper.jar         | Bin 59821 -> 60756 bytes
 TP3/gradle/wrapper/gradle-wrapper.properties  |   3 +-
 TP3/gradlew                                   |  20 ++------
 TP3/{src/test/java => images}/.gitkeep        |   0
 TP3/settings.gradle                           |   2 +-
 {TP1 => TP3}/src/main/java/BlackBox.java      |   0
 44 files changed, 166 insertions(+), 179 deletions(-)
 delete mode 100644 TP1/build.gradle
 create mode 100644 TP1/build.gradle.kts
 rename {TP3 => TP1}/gradle.properties (100%)
 rename {TP2 => TP1}/src/main/java/complex/Complex.java (100%)
 rename {TP2 => TP1}/src/main/java/deque/DoubleEndedQueue.java (100%)
 rename {TP2 => TP1}/src/main/java/palindrome/Palindrome.java (100%)
 rename {TP2 => TP1}/src/main/java/partial_coverage/PartialCoverage.java (100%)
 rename {TP2 => TP1}/src/test/java/complex/ComplexTest.java (100%)
 rename {TP2 => TP1}/src/test/java/palindrome/PalindromeTest.java (100%)
 delete mode 100644 TP2/build.gradle
 create mode 100644 TP2/build.gradle.kts
 rename {TP1/images => TP2/src/main/java}/.gitkeep (100%)
 rename {TP3/src/main => TP2/src/test}/java/.gitkeep (100%)
 delete mode 100644 TP3/build.gradle
 create mode 100644 TP3/build.gradle.kts
 rename {TP1 => TP3}/executables/check00exe (100%)
 rename {TP1 => TP3}/executables/check01exe (100%)
 rename {TP1 => TP3}/executables/check02exe (100%)
 rename {TP1 => TP3}/executables/check03exe (100%)
 rename {TP1 => TP3}/executables/check04exe (100%)
 rename {TP1 => TP3}/executables/check05exe (100%)
 rename {TP1 => TP3}/executables/check06exe (100%)
 rename {TP1 => TP3}/executables/check07exe (100%)
 rename {TP1 => TP3}/executables/check08exe (100%)
 rename {TP1 => TP3}/executables/check09exe (100%)
 rename {TP1 => TP3}/executables/check10exe (100%)
 rename {TP1 => TP3}/executables/check11exe (100%)
 rename TP3/{src/test/java => images}/.gitkeep (100%)
 rename {TP1 => TP3}/src/main/java/BlackBox.java (100%)

diff --git a/TP1/.gitignore b/TP1/.gitignore
index 917e7a6..840c983 100644
--- a/TP1/.gitignore
+++ b/TP1/.gitignore
@@ -1,14 +1,10 @@
-.gradle
-build/
-!gradle/wrapper/gradle-wrapper.jar
-!**/src/main/**/build/
-!**/src/test/**/build/
+.gradle/
+.idea/
+build/**/
+*.iml
+*.ipr
+*.iws
+
 
-### IntelliJ IDEA ###
-.idea
 
-### VS Code ###
-.vscode/
 
-### Mac OS ###
-.DS_Store
\ No newline at end of file
diff --git a/TP1/README.md b/TP1/README.md
index a734f55..b2db0da 100644
--- a/TP1/README.md
+++ b/TP1/README.md
@@ -1,11 +1,14 @@
-# TP 1 : tests boîte noire
+# TP 2 : tests unitaires et couverture de test
 
-Les exécutables à tester sont dans le répertoire `executables`.
-Les fichiers images correspondant au cas de test sont à mettre dans le répertoire `ìmages`.
+Les commandes gradle les plus utiles :
 
+- `gradle test` pour lancer les tests (rapports dans `build/reports/tests/test`),
+- `gradle jacocoTestReport` pour lancer la couverture de code via l'outil [Jacoco](https://www.eclemma.org/jacoco/) (rapport accessible en html à `build/reports/jacoco/test/html/index.html`). 
 
-Pour lancer les tests, il suffit d'utiliser la commande :
+Le fichier `build.gradle` contient la configuration du projet avec notamment la définition de la classe contenant la méthode `main` à exécuter pour l'application.
 
-```bash
-gradle run
-```
+
+## Membre(s) du projet
+
+- NOM, prénom du premier membre du projet
+- NOM, prénom du deuxième membre du projet (optionnel)
diff --git a/TP1/build.gradle b/TP1/build.gradle
deleted file mode 100644
index f778d08..0000000
--- a/TP1/build.gradle
+++ /dev/null
@@ -1,24 +0,0 @@
-plugins {
-    id 'java'
-    id 'application'
-}
-
-group = 'org.example'
-version = '1.0-SNAPSHOT'
-
-repositories {
-    mavenCentral()
-}
-
-dependencies {
-    testImplementation platform('org.junit:junit-bom:5.9.1')
-    testImplementation 'org.junit.jupiter:junit-jupiter'
-}
-
-test {
-    useJUnitPlatform()
-}
-
-application {
-    mainClass.set("BlackBox")
-}
\ No newline at end of file
diff --git a/TP1/build.gradle.kts b/TP1/build.gradle.kts
new file mode 100644
index 0000000..5663ea9
--- /dev/null
+++ b/TP1/build.gradle.kts
@@ -0,0 +1,30 @@
+plugins {
+    id("java")
+}
+
+group = "fr.univ_amu.m1info"
+version = "1.0-SNAPSHOT"
+
+repositories {
+    mavenCentral()
+}
+
+dependencies {
+    testImplementation("org.junit.jupiter:junit-jupiter-api:5.11.4")
+    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.11.4")
+    testRuntimeOnly("org.junit.platform:junit-platform-launcher")
+    testImplementation("org.assertj:assertj-core:3.27.0")
+}
+
+tasks.test {
+    useJUnitPlatform()
+}
+
+
+
+
+
+
+
+
+
diff --git a/TP3/gradle.properties b/TP1/gradle.properties
similarity index 100%
rename from TP3/gradle.properties
rename to TP1/gradle.properties
diff --git a/TP1/gradle/wrapper/gradle-wrapper.jar b/TP1/gradle/wrapper/gradle-wrapper.jar
index 249e5832f090a2944b7473328c07c9755baa3196..41d9927a4d4fb3f96a785543079b8df6723c946b 100644
GIT binary patch
delta 9308
zcmca|i+Sy3<_+46lUF|z*t|6NjqYY`#?PFSC(eGwsuD0WI&^Zw9P@g^(<u!mQ!cRH
zS|)b;tfN@QLKOiPp{|Pp8B8rpIDE>~XM3ilU%MH}^mW0lsQ#+!+F$K9c6n`#bh>!#
zw?p>c{EK00-ECjXe+zc~`!}s@^4+tOgg*a#vbXa6-*@-Ff3MCz|M&U9c7`<v?Vl}_
z6yw*Fi#ySL)_E4YyBoKW5Z`Hz#QKm!f|5o?dn``HZ*TpeG%x;)wf@70OKoHxKP;2<
z+~ebB9(V4r?B@dYxP$TKCo5Frj;gGm_EGAN?4j(LUrH7C%uC(tcue}E+P%tR)prM@
zXM9+@rzTo8siIo-Q3X4Hvf`c7x8G0ssJAEj7(?{LBh?iZ>s!9Je)uO~Cvb?}`NxEw
zdbOGv{C0;f^?CnT(Nns^Uya{h?crk~KaU?R4p$SeMkGcUUVU*r*!*>y+J*(i5w>gG
zO0`eD=4G1dBYgd`-|jqaom1;`Y84*8n6~q{*|HfvXFK1$e5bJN^bDP}nax#7$*X<T
z1FmP@?94b6_P9+<cI(v;ug#11-n$d#;q~WXkg09G^Q&1~UsoA<HfH(HTsW&UgI{n4
zXA*~%b5+$*t;VNMx0KAtbT{Q$c6-I_U7I~0oI8=za@0{{`>EemC;iTD*_F4xVgK2#
z;49)~ua;e#>dBY!Ew8lUbHLq`nKxJ8vRYp}yY5?%!%G8Sq5Ksux44~No%S*1XjaiJ
z|4AC&p%ZsqdZJao%l(?!lA~@aHJ7H^?k%3U<Y}t-q)7%hJ(n#jc+zbg!&0j|FX-0B
z;@cBvOgr^7!f(~Lj<o70pM8D1m)~9+czMGW3&U^1*Dk$Ua4oLO^ytQ*xwjI}D%ec=
z96GPW%6!pW7w@L*F6VNSsr>P|oNtdkD#%f~_tUmdO8Vx)Wieu$^C#681ReUD@^;G0
zOwQ#jdgs|MpM7zzF;Vx}uIFE0a0ZtenXSBSG<m@RhE;tL$F`YX?%WnA5E(03{X|YX
z`M8O`$Im+^hLVkGvn7q!m^fy(KjVok<eVS&f#H~F&f&9MW{W}(s>#i3KFhT&VRe()
z7VR5-Iw!S4mOd~k<J8e?eQ~WPul|T>^g)($8WjTRn(KY9bu^v-P-Shm`hlX4)(;u}
z`Oo+2Kj`M#*P^fegKMAG!)&g7eZ^e+8uPs>A`Wi<(9x8i9CWB$q(=O{Fo(&~klTSD
zYX3C!oMLV$xxVR;yw{J3P4dRq{XYbA+6R9q{^NA8@=wsg^&eI=9siKcx<B#ne%GdY
zgUjnAXB~diV&AnRRbJJx|8coc-TDXoKNdHse^6(wKNjDygU5g~FgNU2$Msp$f@d4%
zUk=_H;;^;Pb#jIfM`?D}Eu(0USMfI=?tl26Yu=G12QIyQQJU`K?w=LxWEuA4kRRWt
zPdB@!Zke9s_TW^cqjJGt)oB@aFLz#Z&E362W<~u=pZpRFDO0`E=iE<jU7_IRt-o$c
zfb?e5tA*L&3wGu#*S)Qr{zW~$W%iRlEzjNr-OOIkrxI1Z(sS(=uI2g6({h8PBPBI2
zm!;=CP4MecJpO4L%evkv*}s?m-5un={dwcFS>CnUE0)_@i%*&x&30+p#KJAHtBhS5
z1CtGPeZ{Y8)$dv*RJ^aL>+THa^m8j?&t^%d2S=YddGAT(b%Xq$G1H#wo=s)kRNc2s
zws&38{IuJx;z#s8ol*R6Vj7w7m3Pg~(sQ%A6*sQv;d2V=3TJy*S!lT=psBeqPh-lN
z)YL2f_rrzmhgRpz&3o+ek$K^|FS%37Umr{7$@nQ#9@W{xeNCyp;JMz6n+Ig~tuQ#%
zlBl}OH~RFl+&Q~5Wq&s0?C_XBn=eAc?rUYK=aH_)!=4<0Z-e)~-}WLkGH6<>K<xK3
zY10kP*VwdtS$Qm6Skvabxyz!7ZC6UBm$g*QzF)F@52N`;M(yWG4)s63#jdli`n%+V
zZODfuvpLs)%{i?*J;7V?k-pi|r%y#qHaGG9|89Is)Rph8LS$AG*P5bTo@Y(FYTPTr
z{id6pie9la-bz>Dx4@cJkCqEKd|q~Ea^fP9dfD@;@A!Vba%WYUwSINJMEi<-8F$ye
zrwV_(I{dHj$Lqt5g)FZQA1q{f?eDy6zJ~S(8>!|a{Fi>zNM&dAt1J+XZTNk3)(gjj
z{!CWNw)>hnHq7JtspC}pm4AU!cV)Wb_qlFMw+C&S5x=*gO-F3rvU2^mzc%g2;dw2+
zX@%V3tXl&0dtS=w%sTMYT1tIG1&`vaEWde&gl4Tjq2%+$yV`c))$dN9<lFCG_sagy
zGObis{_u%4YC7|c79N%V_S~hDGiIjp+I?LdVQGb?f~kS8W#bM%I{eSLVj6$qe)YGv
z?(I1$9C7i{JiF)xssem-4wf<{XFOg1n$=d{S@)ojs$h^1-=zB4^Gq#WA3k7tRn`B$
z+(_MWf@`f9@0$L9FE<#L2RvLETPf2X#iY7uvC5^*6I#R9f10-MPEqN^LrmLDa|AW_
zBz7stoVfjPafL~M(+x{=RqxpBm%G!L%!BN%ecRPNIep{0{{8DLdS|OC9$}m)qWR14
zeYs(&__~FK#!4-B(hlXR*DG#s->|#?gOx*vufQ$0%<mEp-|!u}#_4oj^G=idg<kj0
zPn>U#2EP#X-r&E+eg2KEx{bWQk21=LcpmY*teEI5`aRKMj<b(Vk7MDyc~|?BJ#08*
z{|Fy`#57578N1@-WvME)=88X9u3nK_rDuOKPeFGr$D}3E7rnQ!N?f&k<9?(*`NiVk
z#=t`UtJl^ZsrI?k`}fIIe*ey_Jq+v~rz%Z$O=7n2h~c_eo!+h?r1f@9TMgrHl@^r}
z`(D=1=96RlCKwbjcB>vyIWphv_J)>a^@;!Y3#w{m9C@bh*c=+IVZyoojX>#Xfsn(I
zYwRPpRf+a1JU=)^LaIHcO7`$O8>YjyI^Ktl@cmk~Y;Rgc{oO6MnSa&?cr&wbF)(m&
zFfcGUGOT&<;CL+)1A`<R1B3453n#=TA9y7-*>5Rt{avPO`G1^NUJ^?=-LAqC=zKLH
z=nK<jmiNm}2Z(Lcy_tKp{t2)6EDw`e6)#)uPgSIqWqPk%=zH0?xa@iDx$3gC@8|E!
z?`P0SxalBMDVZiDl9pPbaoJLq)$*LQM}p&VrRKn|Kl-%Iq)ZPQMBRG+e&<t@HPidF
z!(JZJE59>M-K@U#{b#MU9_-pNaqFX^eb289&zvf^F3BMN>R+|;yN~8=;17uskGuGE
zpMFi-);E!*>#lrQ6_#-5*MpCTogYRjs$TY8Y!$U}qqFNVFTdD5c~`X#RiD;gS9Ep5
z&gf_Jls|u16lZO?_P6fsWi5%S)w>QSt~xGnUAp{dOX4c_OUqXp&8*LTXBkpBgRAZF
z^w#HZtdiOlXPw=f?2&7_vv$Kt{=>_7)>)lABhJOM`DWw8Nuoa^UNDHMB&2dUyuWC{
zsOxp%)`bO^)io+FO?$O^uIA)pVT+&Mbei^7W`iZCVIga{Z_lG9PGL=9wn=JvkEZph
zw!LJOow=j!wUJGd#QTcs;G5!Q^^+4H{g>G4nd);%dg=mk{iZD?4x6`ZaZYY3Dq^=<
zI7QcSv1Gy@mzvp6_dEVy6C$p8?5XUwE^ia_=FlB$B-(N|$t#}!B`|NE5=)-arh^kU
z_(o1SW~gO9X})FKwE4DfU%aI!FB3|5eIY`S^P9}#H?2;7Y(_p0*cPM-ox9>=CcUs;
z-uCB)GgiHy;<WyY-pYS*OFiSF@-Bh5pLSh*YAV{4f7!mx<CCPc{6X1OQXke#5Ldpv
zaq+x)(|21K-kB;RbpP-bNyC{hYZLw+mAvy_xsOk+?!vu~eLt*~o_7X&+1$PNCeP5?
zU*=75*io5dSKnP$?^f6n_@4nOZSpcWGK8IJ>D(vEz#y(a`QdW)`bf^2kgHei)3=#d
z+H7;+Q0`tVbV5$Z%u~axMd6@;2IHlMwR=?bPrlH3c}CiE%UbWFQQ6|zncUZ+rhAD;
z9lXZU!<F^=TJ6<sW!u+o+q$)SYsS9+JM+_wJlPum+0|FPpIv?4_Pfsi;&(gE{rCSn
zaM&f}@vJqM<?Q@tv0f7K+#FCp%e6A2YpLeM`Ae;)7R)^MH1CnT%yrM_Tr*csS?2Zp
zXpF9J?>X;^m44-)jWVZY?{Qi_vu59g^;dRWJ6~#Ldt|jq-DJP?k6Cl&o^hu<Ir}M8
zKR(+e?}FxuRIBw*-R4SF%>A<`VAj`5CccZ7S2WMpzqBKAnfa>{+wCVFsM+UF`=?uP
zmH#lzK7Z=WT&2HdiaD28PPqT-dD+YIj6K22MQb)5%fFndy6y0T+e>%4%!)m9e9BVU
zx_471>h<dO?*4n{@$)!Ij+a~7^rt>Enp<~1u~%8j{i*S?%dU5pUuLUoKUO%`jPpD1
zoDZ9I?I&F_$*kGwce`TyvA<UQA4D(3tPGyrvnRNI`P`Ui&&xgk=Vi_++1IuH+h<d&
z_|xxCK7L)%zoKOC{QKH}d6h2wHrW@rJZ@u_{{DI)<NGRS*-ic}@DuzuA>(u6&s(Zj
z%(MRp_U2#IROEj2Copnrc!u4w&E7Q^wa?1^+i`6EhtGC%*FEV@)t^zf|I7AYKPT7i
zJ9~b<(68I3|F#^fFE^0%z1Wi5c9?f>*z?p^=~ueUTh6*1@-kq(X0~qi{cC%^PTK0b
zHhR0s+MC<9W(J>Do&9?Iy7W`|`>yP{vxaN-#d)j3tmV4CT`}~{>)_nKV((oZbzS@W
zC!cU1uc}&Oae2<Oh&{_!spplou3dGvaP#`}UE!vyJ=c6GKU(H~*l=@qeP*5Bp=DcF
zR^D8CeoOUh#iS+5I&;pS-I`Er#w#{A^=o<C<jxCEuk8xBvFiPsEkd2WX;(rvg+6_B
zq2dy2!t-d+uC_N<ee(6|nD^d`m>k?4yJ_yp%L1=A%~)pEz9`Jw=u+a*?XzZx@E@@{
z`=QKOZqoggj{SF~o1Q;=cIW0t(<Rrf>mN_cjLvrEoSm8K$9rpz9N$~MuPTq1$#%KE
z_L5oNo)nrST<Dtq%_jI{=H@21*c*0ouRKn@&;4j{S){%8%BI!Zax<Ac9nCzm*GF#7
zsmwMyWMZqcYW>++SAOX6nD@)4MOAre>(AK0Wu3k0^Q{0I<tr=BwcV<5U*TVOc-n!^
ztLpWqg{1EDZco@`EZJ7MnZ<5<h0gRzF&7UDOrPDbwlAf8`+-Yai+LySzW(ZX1;@U(
zVbZ&lI3`u{HMd-y+0*`}aaFH_`huNiSCUn8J`|O6^KcpMHgo+w$*gSCnGToe;|zQ9
zZ>a^#-LMuiI6F__s+4M{#jdMn*7~<IzG=?M{3F@>zW(Bi4aeALq{ZePb-v4dQ|yjV
zH)EuD@8zmRmn=U{I`p#X%^em&uFVHGT=Ob9=3Lv?ZyUSNV$0lTACA}TSY^57%mV8*
z*N-b1+*z}c(fGo2zF7};w5~qZwRe}_<MVy1W^%==hB?jIy{2MO(((|QiECYDmLKFy
zTRzw1Fqc+kXN1wc%=(oLGg7{OkDR;h>e947iR_aDOlL^@-&|GAs;e+}SFz4YxBJJ{
z)-Ig4B2)eGjhc^|6}}tT8YXRcbF41mycl!dwnq~KloSOUBxKI>cI{&6-faAsZ^fE*
zy3=kxRk_@9SJeBK<epV)uOEFRczK&>qk7L1cDq_xk0+7G?#T3eM#W9$sc)6_yK~$m
zS*h_%MDn4;V708*M*qUKXDzy6H1AFG#m$~-)(%-6u1aYlAJZE&#Qa_79-H6n>D;+3
zK;*bYNvZhsHw{r6UAi?7oPNFO(6lADEBJml1bC}l{m7*G@$~(h+@+7i8f=r(*V#N|
zyJK1<spsdmp2P9+=Hg?K+t~MnUFoamPnolTr)O#CiKJem#eNAXeCkUj3*6LVJ?<>|
znR`lVx{79uGt;I+I{SJrrW`qyQn`K71?4jvA9R&m)0v~;p|$tgleDd?-lQz@uBeN9
ztgpbRawbpP_T7xS#J(G6X4cpSy4o90xgj?9#4-hO=^t5H>1*;8w6`0D_We?_e*VmC
zVZE?S!ItQQ_hrSFzh1_4xanxOxbfE~Hghhk|NNg`Rr*zb+OnuwvjR1zb&2fsZrLJY
zS$;C4EYt0D%f(g3=~H5VF0ItHH(ek6?6}E#(L<{r`Bc1>h^^VDQ+GO3$L{jxgID*b
zluVzx$@{LPvZ6JkkJrXkaW%(YC2hU8>fDl$GLMU)^;|O@&tKTg_IK{T#0!_dls5nK
zs5g3H{Ux^9&PCqr1@jljX1Rs#ythuXZ~Q2E_2#A*-E4QA<V|0s9b$dq&36BEJCEI&
z@0ov6e|{8ge*fIDxxGRl^u6?gy-_n{4S#6ZGl*_7b&1M~jgM~(I{P58PGF~IwV8Iu
zLB?I5od0Y%c>G8Gj)VOl9Gm5z9-p98Ebb>&fAzuokB`~x5Bf{}5wX`jd!6?m+x_$p
z<}Y2B#focHHs3tzTM!tS6u3b<O||Lb3|W`n+}R5=F7)s<==3!ys6}o!x-nxFUsIXR
zjo!`b8DAGq;NWLjZCt`U)uVgyq1;zHL=Lmnckj>rQ2t{#TYdlhl=`aMo~<5l=N=H-
znDC^2@_`5MKl7XXTX@j^QThzCIZ?@lb0x)>N#1R?3~T(n`A>2)-z9P0f1LlXJb0cE
z^zN=+Yt)M1xzYzC%GWJDm?wPht<`dkD3M(D9mSVi&NL>huiPp6X2Y6{3uel-LEBi$
z+uz(fwP?kz^GB2&cVFLfG2)=BWqrPOcT??039(zujxP)qsx1Z9dN^(|GUab(Tbjn*
zCKO<;cdhyK?i9}pJ<eM~<XCoHDO>sU;JXSPrr$R{ra0L=oYFsaQG~&675+tw*6@m{
zb}f3@A~mHdV%eOBJ^I$cQ*+mT;<~}|I<(R%@z8_$A8S{faQnDbRdTDdpmwmO=Y_xZ
zGNorSzOC&)ewNYmAlv_@IFldK|7bVY>&EYIWPZuo$+=fq#P{e%g9^FQ(<ig`8NTql
zpS)-8-iZ=jCf~bKPxJiKP2!EIOaJixCu?)O$bs{xV!Mr4i)8Mdn{%-Kfj!q^d(Y38
zB$gU&U3IWtth?gKJfYNj&&j=OEqUuAPdwXSc(Z=x$9Ud<(*N&1sP}lMGiOF}keWtr
zhw9;2t)hS#%50aXR&L1OV!~f`{Lxm&llK3w{D^1!A1$-^sL<4)9~pn-o8uGvkFA&b
z6K|LJA^VTjvT|$DwFi~;jAGstEfhHwxkK{Hs?)hUYzmf~e*I~wuFb+I<Cs}X?98iq
zrpMRVmhVwFtM6TDo1Xss(Hl*RgHze(?<i^h+oLa^y(2w6(nMxk)tQ3YJ?y3_SI$L<
zx@g^O30kS9aWziBh%K~NMx<CFvuNtWSt>d|lja<oY7~^cgU60<&-_0#5~E6HiHffi
zd70@cy<%bZxjze)di9nTOlvE?_n=Tgdg9I2Y_a8Q_kO&Q_dKiKCN<}7%kR@I9x}|G
zYr15QmaJP8ez)(5SJ0g+Dz$pePpb@_Hr`FXnY?v=Sd7uXlNsME7OiogG4rUU_WuVf
z-<&HsIn!q1U;p>MKOY|nD?i#(wYcBk>V=WN|MkD;RUbyIp1ZARXLjiPnY;F0d%mY#
zE9QX=yF}s2t*fOJ<}_rVu{~3->9gR0ipC0)jxwjiuO`Re_xttbDdVYKEb-RYr<}-+
z+O+=kmZhf-H!xe~r&~-r(6L@yRB+xSp~|e;c4qRcmp}9@%lZ3)JJPW**pKIDLGkO2
z)uP){{Ws3F5k8}tH^XCoWr()@+S8eBck+*4D#}>slDy>nvEF;v*PfFrb)S78=Xt#g
z_j3{ZV(S&tZXcXo)K&V++|ysFgmum9Hg)v~oyX5(68Ec#Z5CuoyYDuoX6-h~?MIn|
zmu|>0n;bYr{v)rN+q36&8>M<D_1KxNy#3nZ)8*?&)Auq@^-sFP?Qm<_rxTC&ytTNw
za-Xsww|cJkqrWQsY(n~B`zL?={KPST?q?r!*?NIF3*0m|n#H;vo|h&rP<n6W{g91E
zO*k$mxFrXM987ed6?xQBZgPl;%8^S-dD|Ad#h=@9H|>O5Yx7};qiJDk`e(cXlH+Hj
zKd)n(_&2S`Z)qGu>J|OK+iT|i44W%BN!>=wtLx5;y2!Ju_zG98JYrxuwd2zM<8s{R
zGUo1izSP^OzBJx$t%I+<Gn?Np1*LwQjq^5!zGis!tz+^}v*qi!GMSz~nEKgip8fW%
zY5(3$GYwomDWo{ZeACvMC#pW5T6R+M+rKYw{e(ir9G%xo=Cgj#eUiXh<R3BjFRNrv
z-&0|YbKj2M_`ZMT-n67-ojlVvUCqNAt}a<|HGg?s-}X8++YE#Hw$ERlb;mrjdC%@v
zX#7xctyc6?!}ZPT%q!Lf%+KKV%&91Utg`Wi%q?eCmnTaZ_V(wgEc^a=dUxKUn#vOg
z%J=QbTJbOKSI4XTh5d{48Q#YIlDO6X`1;ic4;=R|DCzj*)$W;pe!j`vc`{0m>t@A7
zmDy)5efoX!`Yn&@W)(%e{lHnjC4D0Q+oUyXmdp&{mCVYp(_Q#EL-XxnpOuFvf4jWa
z<&}3z(pS}>omZxxczW!G`b)E(4ik3|b>6?PHaX7PC3tqrv`gzRh}8J3|H@+1JSG11
z)I7Jf{EsIy?@OF@GfwIQ>z=2nqRt@(9-I4uA1*8`TG!C`yt!C6W$j|iEnVl9UiGR!
z_w`(!q-FT!<uA%So-CdEC36>ZOi4zG`kU9sZUyb?e%F{*yx=+GFP#<VmhSvwS@ZM7
z=ZLolPw6M{zWdQ<_b0XIr{QMv`fq|<IWo&O-#Xov;n!WgGyRuI)rI)ix*vArE#E21
z_+H^`>^sd5HCa!dermWL%b@yPR-$rW(u8O73XAKnsmn9o-}uSVYWFo`pM&2Nt(ISV
z9rsTA1FH@Heb4UYmpu*yKZySHPPrs+t=I*&mp12@X9gXx&i$yMo55X?x?;s!D|vZ|
zpVM--e-LPy!*w`@fl+@!)z#foZ*F5&aWT8%)s$qu;4;5B|Am_+th$S|SI)WDSsH$L
z!u5o!SFd!`+1BrEk9uL1#cW{xqUzP+?@32_XY3SYxXZk~-eKk*X|=P<TfeC85<kY-
z@LbV~C-~dL-*y+Wwlq(>INeZt-R;?hXXAcx@$^bCFaMnxaI(&pm(eKiO|_ydt2lpI
zyf6O+gCDjXrrw^?jM4Mms!g=6yin|wOY7|u-0SrDdS=O;|5m>B$MbueYMR8du6*F~
zm3w^3{l&$Q1w9SR!=LE4vhURub<Y%ZUO4mT(RuAFmfVfKSJmRxA8=Fg%oJtbyL~IW
zJ_f&A9P(1hA>=|$%c^+{7atY67zNgPoK)Bs;Zd29-*!*F@!0kNfoU49KdvQy=1!dJ
zyWzYZ%LTio>n9l`Z_Z;44y%vvKe$b=;HGQ*()9<^#1DPyPrl~tpKvc=+SHxuhU(j9
zd%Y7Dx$<J=X1@ze5&Yfrm#ts^=u2jf%Dc=J6?0yBpKf2V>{_s5<IWWOQ0B$nw?9qK
z^jf>=S{XmvwC&rfwWDq~h6ZlFX6>VWi}{|S)&Cn0d0xr*zHe|Tzo@cHn(@1&Mg4oZ
zp8MTbiueV}XIx`o{T;I4SBOVFb5y0{-llz>`kq$2l5eG7L~9wIn$EJ)yS6r(^>edU
z>8JXG2Dk6tU-*8RiHxKE#NCNA!j!IMsY+gbyEybk*j9(vs-lk$wNJNJjCinj^0|p0
zRu?+G_x*iBgFnMPb8GjU3BN0UR!rw>{4Y48{-=gWZ9^LKma78Us<tdM+XVgk(_*50
zFN^*#4bWTq{^IwA3@WEJb}2qhvk&Vkj+LBlrR<;NBBH1Kog--aG`{xbCchZ}8Ty#S
zKX`l2r{PDtR_8yC|Mt%3tqd8Me@%JO|8T>O1o=un{@}#w$bYljSJWwQ=eazq?7s7r
z3-8XwbJwqbZhq)_!QWli6n9-XdGGbay%Q^EeY?0T@zw=9AMvfH-#=5lW#OW`^~AH;
z39rv?SeQTI-le$L^>etGqyCAhJ2Cyc=9rc193~>1pKIw*EW7RY$Ij0WIrf%LxRsjF
zUZK$;>?FNx?t_ZLf4A9QzGZSQX)Zab@Yaeamutebyal<d_SdtnJlyz@Z&vHK!ie9T
zH{NT`V%#Fmkm1d+G0Gu}SK$iVk~dB2dd>RlnpS?hQ2gKv&w{Tye%qfPczc}V^85q#
z_N)u)*%bcE{QI-?Q-=J5TW!UkkI$GsL7VAp@r||9pEZ7Rd$Y4;Tf;wb2XEcjmeBo8
z`FSjF*S|EExXpe3->iAz3H9|l&5g%H3>GK3TK!$iRLvOl=DkruzRLc3mfycF+a24_
z)_X1EOLebVhKF)V)3aosh6g9rloW5VP1<(SaYJomoKNbJ?hoEcS#J9(TddwKKIix<
zOYih{ww1pVp0QjLJ(;iY`LoyW$a9mX++q9jubC@o`X5uZqdzQ4rn-cMFH>4s&lY?B
z*r($wkL<0Avplz}*h}=?spnT2Dx9B8EH1XMyvx46Sou;N<EN$U$5W?@Z@Acf;~l>V
zuk_htVX9w*=6pyOF|1$m^vijl4O1IFsrFPCc<BZ_pCJ9(>!tpeO+tJ1l0RAfT5Ys*
zM!C_>_{BB7|Bii*V-%kLXR2l>vrW@|E04T-sbz7Nf1PzLPV0+4kz0ED3CG4K+Ghf+
zl{z<W*c;QNRMnCcu>P95{jUlBDr)x_zu4RQ6t?&+vV9<}RNXOYYt+hB@_PIk&Re3B
z7XN4PUH5hM`iB2E8YlKAA7|85{`5q7Lb*@hDOn4VMH95ST)gJDH~)?La{ZCOezVD|
zw<$b7QCL6I{lDwFDqhZ?rCLshA{y5eGVWe6@$Qy+wOgA1UO8)JGRr0Ki|3cWITxnd
zw61%!vPAcn^o9NNmum*+GoI^SA=>s|{LN;jr^ok)%5G&YeNw++e%swcU$n|Z=iHxS
z_{+CpW$}``ESW6ND>ZE5-1n8GZ<-f%a#7=sW%IUN&(M10om^knd+xdhQ%rxt=QjZp
zJk#BpgMQfjlRs5GHD;B^2^qoL9@C#c5b?RKxP-$<{`fc1-x=QwVsFm-@24I<^^~Ex
z%X_P^DvjnNnv=Fw>SfyWKl^m^6i?gXM%4qJov+1&V&`=P-;UvwZC$aeWWv3@^Tnn<
zi#PQMe}8=2&+9Atn=bvyt`{u+eNy9WJ-^+ziO(z@<i2O{tT38!p7}PbNptsx-%b{V
zg1X0UtPr^x8T8{s?6W%KLqT$Dg54kGZfI;ty;ve~?S2rO&e`1fcRQypn-adF>FX|L
zWqrjT&y+8Ilb73GDfx59q-DjTX6qeyZfz0!aB0n=r5cYPDlK^4A+&-+qRLgYUe|Bp
zi#AT~#+B8<^Gr{aI(6+%R$tNJKG)>z`N@rD$E$iHRF^Lei)u4EYF}mgVWqCu6b{FB
zmJcN^7Z`%rQ>6T-@8Z<?T<O-8Dq1!3^C`y3vlk`@tUoN!onGYFcXZ$7Xq#^C;O^{T
z$?MCrF5Fo?m*w^87mtcd80X)VIdSxO@rMkapL32D2X)-wY4)!8l^7GV|4w^xQITHr
zKOS{^3(L}(^4CgV8QDANyN525IBfU1qAqLxM!%A$_n!66)wrFa{3M6(nGxIbXSG7f
z3O45itL(&=?^n3nt9?=~rlw@7>C^qY8^4?nxc8rN^W8lTvZBbd6jxHax#bxc7-T1_
zbK7!1(b77ree#U&)~8IH>$#KTCOh4c+H8JH610XwYI4?X@yYx0MJ9iEX2hh-Jo(}Y
z(aHPrr6&KrD=?Y0RDg#83YIkXa!g+MLUyu2DaYg=&jcpFK#?rq1WUes9>B!R2WG~+
zaAx`@IC<d<U#2(}un6x<2PQvNunjLKDol30D=>M=ODU#M9k9@c8B&w)zZ94pa9fH=
zQXeYBHo5(_;^g-)rI>gu!9ohJ<YmC?JUAE_+JqPwl%UQ7QA--XK@=6dl9xf5r~%1B
z@sh@FC$LEeUTMi72Fw{46rc(~)RM+vSFoajSL~COUK=p^M}xV1dwC|8zSd&;9Xom9
z>lCK@@sk(6R+_B&#(+sZee%T<Mw5HrXfc`ROn!J)fAa0u0+WBdkzz8+pZxHw%w&VN
z0+ZeE^2xxXhJk@W8Dtj}FKO(pn5@ICI{D>oEvB~>ljm@2Pj<MY#bj1FIp>ZwQ)=bp
z`FxU-b$O&F-?^j3^r3q4d_LRBckT#G4!tYIw6I}v;oVp!^QOsxwlb67+_hwy-VA0w
ze<CwE{+<-m-OkB@w#t*&%dmsvE>jjcVo!8UzIZR4DW`Ap#d{i)lkS@{#ZLq)-*?}Y
zY3o!lQ{#a@Q`!tLbIt=drit^xO!kMaOcNGO4z$&roM9?9x%Z(K)6}J4ZmxyEWZwq@
zlijS5ZCbhlELm$UIJx(sz~qcaQcR0hO%Aj*oxJmr7Sp`7lLKw_C)YSYw3<AYV(Q%h
zwkO^hqG8HoDW->;z(SWFdoW3Fn;dAXG}-=%0aNLT$%RjXn3^t3HcZx=?0-*SvU?h`
m&C4!NmVcVYRCRT-W`?y`fHx}}DBMjLOc=a`7#Mu7gLnX{CAQxH

delta 10197
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
K1_tR{ARYkAI0JnE

diff --git a/TP1/gradle/wrapper/gradle-wrapper.properties b/TP1/gradle/wrapper/gradle-wrapper.properties
index 16e76d0..d6e308a 100644
--- a/TP1/gradle/wrapper/gradle-wrapper.properties
+++ b/TP1/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,5 @@
-#Tue Dec 05 18:16:17 CET 2023
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
diff --git a/TP1/gradlew b/TP1/gradlew
index 1b6c787..5580fce 100755
--- a/TP1/gradlew
+++ b/TP1/gradlew
@@ -55,7 +55,7 @@
 #       Darwin, MinGW, and NonStop.
 #
 #   (3) This script is generated from the Groovy template
-#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+#       https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
 #       within the Gradle project.
 #
 #       You can find Gradle at https://github.com/gradle/gradle/.
@@ -80,13 +80,13 @@ do
     esac
 done
 
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-APP_NAME="Gradle"
+# This is normally unused
+# shellcheck disable=SC2034
 APP_BASE_NAME=${0##*/}
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
 
 # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+DEFAULT_JVM_OPTS='-Dfile.encoding=UTF-8 "-Xmx64m" "-Xms64m"'
 
 # Use the maximum available, or set MAX_FD != -1 to use that value.
 MAX_FD=maximum
@@ -143,12 +143,16 @@ fi
 if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
     case $MAX_FD in #(
       max*)
+        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC3045
         MAX_FD=$( ulimit -H -n ) ||
             warn "Could not query maximum file descriptor limit"
     esac
     case $MAX_FD in  #(
       '' | soft) :;; #(
       *)
+        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC3045
         ulimit -n "$MAX_FD" ||
             warn "Could not set maximum file descriptor limit to $MAX_FD"
     esac
@@ -205,6 +209,12 @@ set -- \
         org.gradle.wrapper.GradleWrapperMain \
         "$@"
 
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+    die "xargs is not available"
+fi
+
 # Use "xargs" to parse quoted args.
 #
 # With -n1 it outputs one arg per line, with the quotes and backslashes removed.
diff --git a/TP1/settings.gradle b/TP1/settings.gradle
index 83bb007..3c15e35 100644
--- a/TP1/settings.gradle
+++ b/TP1/settings.gradle
@@ -1,2 +1,2 @@
-rootProject.name = 'tp_1_test_blackbox'
+rootProject.name = 'tp_1_unit_test_and_coverage'
 
diff --git a/TP2/src/main/java/complex/Complex.java b/TP1/src/main/java/complex/Complex.java
similarity index 100%
rename from TP2/src/main/java/complex/Complex.java
rename to TP1/src/main/java/complex/Complex.java
diff --git a/TP2/src/main/java/deque/DoubleEndedQueue.java b/TP1/src/main/java/deque/DoubleEndedQueue.java
similarity index 100%
rename from TP2/src/main/java/deque/DoubleEndedQueue.java
rename to TP1/src/main/java/deque/DoubleEndedQueue.java
diff --git a/TP2/src/main/java/palindrome/Palindrome.java b/TP1/src/main/java/palindrome/Palindrome.java
similarity index 100%
rename from TP2/src/main/java/palindrome/Palindrome.java
rename to TP1/src/main/java/palindrome/Palindrome.java
diff --git a/TP2/src/main/java/partial_coverage/PartialCoverage.java b/TP1/src/main/java/partial_coverage/PartialCoverage.java
similarity index 100%
rename from TP2/src/main/java/partial_coverage/PartialCoverage.java
rename to TP1/src/main/java/partial_coverage/PartialCoverage.java
diff --git a/TP2/src/test/java/complex/ComplexTest.java b/TP1/src/test/java/complex/ComplexTest.java
similarity index 100%
rename from TP2/src/test/java/complex/ComplexTest.java
rename to TP1/src/test/java/complex/ComplexTest.java
diff --git a/TP2/src/test/java/palindrome/PalindromeTest.java b/TP1/src/test/java/palindrome/PalindromeTest.java
similarity index 100%
rename from TP2/src/test/java/palindrome/PalindromeTest.java
rename to TP1/src/test/java/palindrome/PalindromeTest.java
diff --git a/TP2/README.md b/TP2/README.md
index b2db0da..0d545b0 100644
--- a/TP2/README.md
+++ b/TP2/README.md
@@ -1,14 +1,20 @@
-# TP 2 : tests unitaires et couverture de test
+# Projet
+
+Modèle de projet gradle pour les tests unitaires avec mock grace à [Mockito](https://site.mockito.org/).
 
 Les commandes gradle les plus utiles :
 
 - `gradle test` pour lancer les tests (rapports dans `build/reports/tests/test`),
-- `gradle jacocoTestReport` pour lancer la couverture de code via l'outil [Jacoco](https://www.eclemma.org/jacoco/) (rapport accessible en html à `build/reports/jacoco/test/html/index.html`). 
+- `gradle run` pour lancer le programme,
+- `gradle jacocoTestReport` pour lancer la couverture de code via l'outil [Jacoco](https://www.eclemma.org/jacoco/) (rapports dans `build/reports/jacoco/test`).
 
 Le fichier `build.gradle` contient la configuration du projet avec notamment la définition de la classe contenant la méthode `main` à exécuter pour l'application.
 
+Le projet est configuré (via le fichier `.gitlab-ci.yml`) pour produire un jar et lancer les tests sur le serveur à chaque *push*. Si la suite de tests échoue, vous recevrez un mail avec `Failed pipeline` dans l'intitulé de la part d'etulab.
+
 
 ## Membre(s) du projet
 
 - NOM, prénom du premier membre du projet
 - NOM, prénom du deuxième membre du projet (optionnel)
+
diff --git a/TP2/build.gradle b/TP2/build.gradle
deleted file mode 100644
index 25ec172..0000000
--- a/TP2/build.gradle
+++ /dev/null
@@ -1,42 +0,0 @@
-plugins {
-    id 'java'
-    id 'application'
-    id 'jacoco'
-}
-
-group 'fr.univ_amu'
-version '1.0-SNAPSHOT'
-
-repositories {
-    mavenCentral()
-}
-
-dependencies {
-    testImplementation 'org.junit.jupiter:junit-jupiter:5.9.2'
-    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
-    testImplementation("org.assertj:assertj-core:3.24.2")
-}
-
-test {
-    finalizedBy jacocoTestReport
-}
-
-jacocoTestReport {
-    dependsOn test // tests are required to run before generating the report
-    reports {
-        xml.required = true
-    }
-}
-
-test {
-    useJUnitPlatform()
-}
-
-
-
-
-
-
-
-
-
diff --git a/TP2/build.gradle.kts b/TP2/build.gradle.kts
new file mode 100644
index 0000000..7649f09
--- /dev/null
+++ b/TP2/build.gradle.kts
@@ -0,0 +1,43 @@
+plugins {
+    id("java")
+    id("jacoco")
+}
+
+repositories {
+    mavenCentral()
+}
+
+dependencies {
+    testImplementation("org.junit.jupiter:junit-jupiter-api:5.11.4")
+    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.11.4")
+    testRuntimeOnly("org.junit.platform:junit-platform-launcher")
+    testImplementation("org.assertj:assertj-core:3.27.0")
+    testImplementation("org.mockito:mockito-core:5.15.2")
+}
+
+tasks.test {
+    finalizedBy("jacocoTestReport")
+}
+
+tasks.jacocoTestReport {
+    dependsOn("test")
+    reports {
+        xml.required = true
+        html.outputLocation = layout.buildDirectory.dir("jacocoHtml")
+    }
+}
+
+tasks.test {
+    useJUnitPlatform()
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/TP2/gradle/wrapper/gradle-wrapper.properties b/TP2/gradle/wrapper/gradle-wrapper.properties
index a595206..d6e308a 100644
--- a/TP2/gradle/wrapper/gradle-wrapper.properties
+++ b/TP2/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
diff --git a/TP2/settings.gradle b/TP2/settings.gradle
index e349141..b5c5332 100644
--- a/TP2/settings.gradle
+++ b/TP2/settings.gradle
@@ -1,2 +1,2 @@
-rootProject.name = 'tp_2_unit_test_and_coverage'
+rootProject.name = 'tp_2_mocking'
 
diff --git a/TP1/images/.gitkeep b/TP2/src/main/java/.gitkeep
similarity index 100%
rename from TP1/images/.gitkeep
rename to TP2/src/main/java/.gitkeep
diff --git a/TP3/src/main/java/.gitkeep b/TP2/src/test/java/.gitkeep
similarity index 100%
rename from TP3/src/main/java/.gitkeep
rename to TP2/src/test/java/.gitkeep
diff --git a/TP3/.gitignore b/TP3/.gitignore
index 840c983..917e7a6 100644
--- a/TP3/.gitignore
+++ b/TP3/.gitignore
@@ -1,10 +1,14 @@
-.gradle/
-.idea/
-build/**/
-*.iml
-*.ipr
-*.iws
-
+.gradle
+build/
+!gradle/wrapper/gradle-wrapper.jar
+!**/src/main/**/build/
+!**/src/test/**/build/
 
+### IntelliJ IDEA ###
+.idea
 
+### VS Code ###
+.vscode/
 
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/TP3/README.md b/TP3/README.md
index 0d545b0..a734f55 100644
--- a/TP3/README.md
+++ b/TP3/README.md
@@ -1,20 +1,11 @@
-# Projet
+# TP 1 : tests boîte noire
 
-Modèle de projet gradle pour les tests unitaires avec mock grace à [Mockito](https://site.mockito.org/).
+Les exécutables à tester sont dans le répertoire `executables`.
+Les fichiers images correspondant au cas de test sont à mettre dans le répertoire `ìmages`.
 
-Les commandes gradle les plus utiles :
 
-- `gradle test` pour lancer les tests (rapports dans `build/reports/tests/test`),
-- `gradle run` pour lancer le programme,
-- `gradle jacocoTestReport` pour lancer la couverture de code via l'outil [Jacoco](https://www.eclemma.org/jacoco/) (rapports dans `build/reports/jacoco/test`).
-
-Le fichier `build.gradle` contient la configuration du projet avec notamment la définition de la classe contenant la méthode `main` à exécuter pour l'application.
-
-Le projet est configuré (via le fichier `.gitlab-ci.yml`) pour produire un jar et lancer les tests sur le serveur à chaque *push*. Si la suite de tests échoue, vous recevrez un mail avec `Failed pipeline` dans l'intitulé de la part d'etulab.
-
-
-## Membre(s) du projet
-
-- NOM, prénom du premier membre du projet
-- NOM, prénom du deuxième membre du projet (optionnel)
+Pour lancer les tests, il suffit d'utiliser la commande :
 
+```bash
+gradle run
+```
diff --git a/TP3/build.gradle b/TP3/build.gradle
deleted file mode 100644
index 38e5a4e..0000000
--- a/TP3/build.gradle
+++ /dev/null
@@ -1,43 +0,0 @@
-plugins {
-    id 'java'
-    id 'application'
-    id 'jacoco'
-}
-
-group 'fr.univ_amu'
-version '1.0-SNAPSHOT'
-
-repositories {
-    mavenCentral()
-}
-
-dependencies {
-    testImplementation 'org.junit.jupiter:junit-jupiter:5.9.2'
-    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
-    testImplementation('org.mockito:mockito-core:5.9.0')
-    testImplementation("org.assertj:assertj-core:3.25.1")
-}
-
-test {
-    finalizedBy jacocoTestReport
-}
-
-jacocoTestReport {
-    dependsOn test // tests are required to run before generating the report
-    reports {
-        xml.required = true
-    }
-}
-
-test {
-    useJUnitPlatform()
-}
-
-
-
-
-
-
-
-
-
diff --git a/TP3/build.gradle.kts b/TP3/build.gradle.kts
new file mode 100644
index 0000000..3dde6c7
--- /dev/null
+++ b/TP3/build.gradle.kts
@@ -0,0 +1,23 @@
+plugins {
+    id("java")
+    id("application")
+}
+
+repositories {
+    mavenCentral()
+}
+
+dependencies {
+    testImplementation("org.junit.jupiter:junit-jupiter-api:5.11.4")
+    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.11.4")
+    testRuntimeOnly("org.junit.platform:junit-platform-launcher")
+    testImplementation("org.assertj:assertj-core:3.27.0")
+}
+
+tasks.test {
+    useJUnitPlatform()
+}
+
+application {
+    mainClass.set("BlackBox")
+}
\ No newline at end of file
diff --git a/TP1/executables/check00exe b/TP3/executables/check00exe
similarity index 100%
rename from TP1/executables/check00exe
rename to TP3/executables/check00exe
diff --git a/TP1/executables/check01exe b/TP3/executables/check01exe
similarity index 100%
rename from TP1/executables/check01exe
rename to TP3/executables/check01exe
diff --git a/TP1/executables/check02exe b/TP3/executables/check02exe
similarity index 100%
rename from TP1/executables/check02exe
rename to TP3/executables/check02exe
diff --git a/TP1/executables/check03exe b/TP3/executables/check03exe
similarity index 100%
rename from TP1/executables/check03exe
rename to TP3/executables/check03exe
diff --git a/TP1/executables/check04exe b/TP3/executables/check04exe
similarity index 100%
rename from TP1/executables/check04exe
rename to TP3/executables/check04exe
diff --git a/TP1/executables/check05exe b/TP3/executables/check05exe
similarity index 100%
rename from TP1/executables/check05exe
rename to TP3/executables/check05exe
diff --git a/TP1/executables/check06exe b/TP3/executables/check06exe
similarity index 100%
rename from TP1/executables/check06exe
rename to TP3/executables/check06exe
diff --git a/TP1/executables/check07exe b/TP3/executables/check07exe
similarity index 100%
rename from TP1/executables/check07exe
rename to TP3/executables/check07exe
diff --git a/TP1/executables/check08exe b/TP3/executables/check08exe
similarity index 100%
rename from TP1/executables/check08exe
rename to TP3/executables/check08exe
diff --git a/TP1/executables/check09exe b/TP3/executables/check09exe
similarity index 100%
rename from TP1/executables/check09exe
rename to TP3/executables/check09exe
diff --git a/TP1/executables/check10exe b/TP3/executables/check10exe
similarity index 100%
rename from TP1/executables/check10exe
rename to TP3/executables/check10exe
diff --git a/TP1/executables/check11exe b/TP3/executables/check11exe
similarity index 100%
rename from TP1/executables/check11exe
rename to TP3/executables/check11exe
diff --git a/TP3/gradle/wrapper/gradle-wrapper.jar b/TP3/gradle/wrapper/gradle-wrapper.jar
index 41d9927a4d4fb3f96a785543079b8df6723c946b..249e5832f090a2944b7473328c07c9755baa3196 100644
GIT binary patch
delta 10197
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
K1_tR{ARYkAI0JnE

delta 9308
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

diff --git a/TP3/gradle/wrapper/gradle-wrapper.properties b/TP3/gradle/wrapper/gradle-wrapper.properties
index a595206..6cad6cd 100644
--- a/TP3/gradle/wrapper/gradle-wrapper.properties
+++ b/TP3/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,6 @@
+#Tue Dec 05 18:16:17 CET 2023
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
diff --git a/TP3/gradlew b/TP3/gradlew
index 5580fce..1b6c787 100755
--- a/TP3/gradlew
+++ b/TP3/gradlew
@@ -55,7 +55,7 @@
 #       Darwin, MinGW, and NonStop.
 #
 #   (3) This script is generated from the Groovy template
-#       https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
 #       within the Gradle project.
 #
 #       You can find Gradle at https://github.com/gradle/gradle/.
@@ -80,13 +80,13 @@ do
     esac
 done
 
-# This is normally unused
-# shellcheck disable=SC2034
-APP_BASE_NAME=${0##*/}
 APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
 
+APP_NAME="Gradle"
+APP_BASE_NAME=${0##*/}
+
 # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='-Dfile.encoding=UTF-8 "-Xmx64m" "-Xms64m"'
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
 
 # Use the maximum available, or set MAX_FD != -1 to use that value.
 MAX_FD=maximum
@@ -143,16 +143,12 @@ fi
 if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
     case $MAX_FD in #(
       max*)
-        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
-        # shellcheck disable=SC3045
         MAX_FD=$( ulimit -H -n ) ||
             warn "Could not query maximum file descriptor limit"
     esac
     case $MAX_FD in  #(
       '' | soft) :;; #(
       *)
-        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
-        # shellcheck disable=SC3045
         ulimit -n "$MAX_FD" ||
             warn "Could not set maximum file descriptor limit to $MAX_FD"
     esac
@@ -209,12 +205,6 @@ set -- \
         org.gradle.wrapper.GradleWrapperMain \
         "$@"
 
-# Stop when "xargs" is not available.
-if ! command -v xargs >/dev/null 2>&1
-then
-    die "xargs is not available"
-fi
-
 # Use "xargs" to parse quoted args.
 #
 # With -n1 it outputs one arg per line, with the quotes and backslashes removed.
diff --git a/TP3/src/test/java/.gitkeep b/TP3/images/.gitkeep
similarity index 100%
rename from TP3/src/test/java/.gitkeep
rename to TP3/images/.gitkeep
diff --git a/TP3/settings.gradle b/TP3/settings.gradle
index 3537f06..11bb3fe 100644
--- a/TP3/settings.gradle
+++ b/TP3/settings.gradle
@@ -1,2 +1,2 @@
-rootProject.name = 'tp_3_mocking'
+rootProject.name = 'tp_3_test_blackbox'
 
diff --git a/TP1/src/main/java/BlackBox.java b/TP3/src/main/java/BlackBox.java
similarity index 100%
rename from TP1/src/main/java/BlackBox.java
rename to TP3/src/main/java/BlackBox.java
-- 
GitLab