V2bis : doc technique et tests fonctionnels

This commit is contained in:
Erwann PHILIPPE 2026-02-03 15:44:38 +01:00
parent 7b0e6c6e09
commit 00b7ac3fda
7 changed files with 129 additions and 0 deletions

View file

@ -13,6 +13,9 @@
</DropdownSelection>
<DialogSelection />
</SelectionState>
<SelectionState runConfigName="testCalculIMG()">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
</selectionStates>
</component>
</project>

View file

@ -1,6 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="JavadocGenerationManager">
<option name="OUTPUT_DIRECTORY" value="$PROJECT_DIR$/../doc_app_coach" />
<option name="OPTION_SCOPE" value="private" />
<option name="OTHER_OPTIONS" value="-encoding utf8 -docencoding utf8 -charset utf8 -sourcepath C:\Users\erwan\AppData\Local\Android\Sdk\platforms\android-36\android.jar --ignore-source-errors" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>

View file

@ -0,0 +1,39 @@
package com.example.coach.view;
import androidx.test.ext.junit.rules.ActivityScenarioRule;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.action.ViewActions.typeText;
import static androidx.test.espresso.action.ViewActions.closeSoftKeyboard;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
import com.example.coach.R;
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
@Rule
public ActivityScenarioRule activityRule = new ActivityScenarioRule<>(MainActivity.class);
@Test
public void testCalculIMG(){
onView(withId(R.id.txtPoids)).perform(typeText("70"), closeSoftKeyboard());
onView(withId(R.id.txtTaille)).perform(typeText("180"), closeSoftKeyboard());
onView(withId(R.id.txtAge)).perform(typeText("40"), closeSoftKeyboard());
onView(withId(R.id.btnCalc)).perform(click());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

View file

@ -1,5 +1,15 @@
package com.example.coach.contract;
/**
* Contrat pour que le CalculPresenter puisse envoyer des infos à la vue
*/
public interface ICalculView {
/**
* Méthode permettant le transfert des résultats vers la vue
* @param image nom du fichier du smiley
* @param img valeur de l'img calculé
* @param message message à afficher
* @param normal vrai si l'img est normal
*/
void AfficherResultat(String image, double img, String message, boolean normal);
}

View file

@ -1,5 +1,8 @@
package com.example.coach.model;
/**
* Classe métier contenant les informations d'un profil
*/
public class Profil {
private static final int MIN_FEMME = 25;
private static final int MAX_FEMME = 30;
@ -16,6 +19,13 @@ public class Profil {
private double img;
private int indice;
/**
* Constructeur : Valorise les propriétés
* @param poids
* @param taille
* @param age
* @param sexe
*/
public Profil(Integer poids, Integer taille, Integer age, Integer sexe) {
this.poids = poids;
this.taille = taille;
@ -25,6 +35,10 @@ public class Profil {
this.indice = calculIndice();
}
/**
* Calcul de l'img
* @return résultat du calcul de l'img
*/
private double calculImg()
{
double img;
@ -33,6 +47,11 @@ public class Profil {
return img;
}
/**
* Calcul de l'indice correspondant à l'img
* pour afficher le bon message et la bonne image
* @return valeur de l'indice
*/
private int calculIndice()
{
int min;
@ -55,15 +74,34 @@ public class Profil {
}
}
/**
*
* @return Valeur de l'img
*/
public double getImg(){
return this.img;
}
/**
*
* @return message à afficher selon l'img
*/
public String getMessage(){
return MESSAGE[this.indice];
}
/**
* nom de l'image drawable à afficher
* @return
*/
public String getImage(){
return IMAGE[this.indice];
}
/**
*
* @return vrai si l'img est normal
*/
public boolean normal(){
if(indice == 1){
return true;

View file

@ -3,13 +3,28 @@ package com.example.coach.presenter;
import com.example.coach.contract.ICalculView;
import com.example.coach.model.Profil;
/**
* 'presenter' dédié à la vue affichant le calcul de l'img
*/
public class CalculPresenter {
private ICalculView vue;
/**
* Constructeur : valorise la propriété permettant d'accéder à la vue
* @param vue
*/
public CalculPresenter(ICalculView vue) {
this.vue = vue;
}
/**
* Créer le profil avec les informations reçues de la vue
* Renvoie à la vue les infos à afficher
* @param sexe
* @param poids
* @param taille
* @param age
*/
public void creerProfil(Integer sexe, Integer poids, Integer taille, Integer age)
{
Profil profil = new Profil(poids, taille, age, sexe);

View file

@ -19,6 +19,9 @@ import com.example.coach.R;
import com.example.coach.contract.ICalculView;
import com.example.coach.presenter.CalculPresenter;
/**
* Activity qui permet le calcul de l'img
*/
public class MainActivity extends AppCompatActivity implements ICalculView {
private EditText txtPoids;
@ -45,6 +48,13 @@ public class MainActivity extends AppCompatActivity implements ICalculView {
init();
}
/**
* Méthode permettant l'affichage du résultat du calcul de l'img
* @param image nom du fichier drawable pour le smiley
* @param img valeur de l'img
* @param message message à afficher
* @param normal faux si l'img n'est pas normal, vrai dans le cas inverse
*/
@Override
public void AfficherResultat(String image, double img, String message, boolean normal) {
int iamgeId = getResources().getIdentifier(image, "drawable", getPackageName());
@ -63,6 +73,9 @@ public class MainActivity extends AppCompatActivity implements ICalculView {
}
}
/**
* Traitements à réaliser lors du lancement de l'application
*/
private void init()
{
chargeObjetsGraphiques();
@ -70,6 +83,9 @@ public class MainActivity extends AppCompatActivity implements ICalculView {
btnCalc.setOnClickListener(v -> btnCalcClic());
}
/**
* Récupère les objets graphiques
*/
private void chargeObjetsGraphiques()
{
txtPoids = (EditText) findViewById(R.id.txtPoids);
@ -86,6 +102,9 @@ public class MainActivity extends AppCompatActivity implements ICalculView {
btnCalc = (Button) findViewById(R.id.btnCalc);
}
/**
* Traitements à réaliser lors du clic sur le bouton
*/
private void btnCalcClic()
{
int poids = 0, taille = 0, age = 0, sexe = 0;