();
+
+ }
+
+ /**
+ * Remise à zero de ce programme
+ *
+ * Vide ce programme de toute lignes de code (instruction associée
+ * à une étiquette)
+ */
+ public void raz() {
+ lignesCode.clear();
+ compteurOrdinnal.clear();
+ }
+
+ /**
+ * Ajoute une ligne de code (instruction associée à une étiquette)
+ * à ce programme
+ *
+ * Une ligne ajoutée à une même étiquette écrase le contenu associé
+ * à cette dernière
+ *
+ * @param etiquette pour donner l'ordre d'exécution de ce programme
+ * @param instruction associée une étiquette à insérer dans ce
+ * programme
+ * @throws NullPointerException si l'étiquette ou l'instruction
+ * est nulle
+ */
+ public void ajouterLigne(Etiquette etiquette, Instruction instruction) {
+ if (etiquette == null || instruction == null) {
+ throw new NullPointerException();
+ }
+
+ lignesCode.put(etiquette, instruction);
+ }
+
+ /* non javadoc
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+
+ Object[] tableauEtiquette
+ = lignesCode.keySet().toArray();
+
+ Object[] tableauInstruction
+ = lignesCode.values().toArray();
+
+ StringBuilder aAfficher = new StringBuilder("");
+
+ for (int i = 0; i < tableauEtiquette.length; i++) {
+ aAfficher.append(tableauEtiquette[i] + " "
+ + tableauInstruction[i] + '\n');
+ }
+
+ return aAfficher.toString();
+ }
+
+ /**
+ * Liste des lignes de code comprise entre les étiquettes de
+ * début et les étiquettes de fin
+ *
+ * S'il n'y aucune ligne de code dans l'intervalle, alors la
+ * chaîne renvoyée contient un message qui l'indique.
+ *
+ * @param debut étiquette à partir de laquelle le programme
+ * est listé
+ * @param fin dernière étiquette associée à son contenu à lister
+ * @return la représentation texte des lignes de code comprise
+ * entre les étiquettes de début et les étiquettes de fin
+ * @throws InterpreteurException si fin est strictement inférieur
+ * à debut
+ */
+ public String listeBornee(Etiquette debut, Etiquette fin) {
+
+ if (fin.compareTo(debut) < 0) {
+ throw new InterpreteurException(ERREUR_INTERVALLE);
+ }
+
+ StringBuilder aAfficher = new StringBuilder("");
+ Etiquette cleCourante = debut;
+ Instruction instCourante = null;
+ Map.Entry entreeCourante;
+ boolean lignesRestantes;
+
+ do {
+ entreeCourante = lignesCode.ceilingEntry(cleCourante);
+ lignesRestantes = entreeCourante != null;
+
+ if (lignesRestantes) {
+ cleCourante = entreeCourante.getKey();
+ instCourante = entreeCourante.getValue();
+ lignesRestantes = cleCourante.compareTo(fin) <= 0;
+ }
+
+ if (lignesRestantes) {
+ aAfficher.append(cleCourante + " " + instCourante + '\n');
+ cleCourante = new Etiquette(cleCourante.getValeur() + 1);
+ }
+ } while (lignesRestantes);
+
+ return aAfficher.toString().equals("")
+ ? "Aucune ligne de code dans cet intervalle.\n"
+ : aAfficher.toString();
+ }
+
+ /**
+ * Efface les lignes de code comprises entre les étiquettes debut
+ * et fin
+ *
+ * @param debut étiquette à partir de laquelle le programme
+ * est à effacer
+ * @param fin dernière étiquette associée à son contenu à effacer
+ * @throws InterpreteurException si fin est strictement inférieur
+ * à debut
+ */
+ public void effacer(Etiquette debut, Etiquette fin) {
+
+ if (fin.compareTo(debut) < 0) {
+ throw new InterpreteurException(ERREUR_INTERVALLE);
+ }
+
+ Etiquette cleCourante = debut;
+ boolean lignesRestantes;
+
+ do {
+ cleCourante = lignesCode.ceilingKey(cleCourante);
+ lignesRestantes = cleCourante != null
+ && cleCourante.compareTo(fin) <= 0;
+ if (lignesRestantes) {
+ lignesCode.remove(cleCourante);
+ cleCourante = new Etiquette(cleCourante.getValeur() + 1);
+ }
+ } while (lignesRestantes);
+ }
+
+ /**
+ * Arrête l'exécution du programme
+ */
+ public void stop() {
+ enExecution = false;
+ }
+
+ /**
+ * Boucle d'exécution du programme
+ */
+ private void execution() {
+ Etiquette etiquetteCourante;
+ while (enExecution) {
+ etiquetteCourante = compteurOrdinnal.pop();
+ etiquetteCourante = lignesCode.ceilingKey(etiquetteCourante);
+ enExecution = etiquetteCourante != null
+ && etiquetteCourante.getValeur() + 1 <= VALEUR_ETIQUETTE_MAX;
+
+ if (enExecution) {
+ compteurOrdinnal.push(
+ new Etiquette(etiquetteCourante.getValeur() + 1));
+ lignesCode.get(etiquetteCourante).executer();
+ }
+ }
+ }
+
+ /**
+ * Lance l'exécution du programme à partir de l'étiquette
+ * passée en argument
+ *
+ * @param etiquetteDepart étiquette à partir de laquelle
+ * l'exécution du programme est lancée
+ */
+ public void lancer(Etiquette etiquetteDepart) {
+ compteurOrdinnal.clear();
+ compteurOrdinnal.push(etiquetteDepart);
+ enExecution = true;
+ execution();
+ }
+
+ /**
+ * Lance l'exécution du programme à partir de l'étiquette
+ * la plus petite
+ */
+ public void lancer() {
+ lancer(new Etiquette(VALEUR_ETIQUETTE_MIN));
+ }
+
+ /**
+ * Change le compteur ordinal avec l'étiquette argument
+ * @param destination étiquette où continuer l'exécution
+ */
+ public void vaen(Etiquette destination) {
+ if (!compteurOrdinnal.isEmpty()) {
+ compteurOrdinnal.pop();
+ }
+ compteurOrdinnal.push(destination);
+ enExecution = true;
+ execution();
+ }
+
+ /**
+ * Appel une procédure en empilant l'étiquette de départ dans
+ * le compteurOrdinal
+ * @param depart étiquette du début de la procédure
+ */
+ public void appelProcedure(Etiquette depart) {
+ compteurOrdinnal.push(depart);
+ }
+
+ /**
+ * Retour d'une procédure en dépilant l'étiquette de départ dans
+ * le compteurOrdinal
+ * @param depart étiquette du début de la procédure
+ * @throws ExecutionException lorsque retourProcedure vide le
+ * compteurOrdinnal
+ */
+ public void retourProcedure() {
+ final String ERREUR_RETOUR = "erreur retour nécessite un appel de "
+ + "procédure au préalable";
+ try {
+ compteurOrdinnal.pop();
+ } catch (EmptyStackException lancee) {
+ // empty body
+ }
+
+
+ if (compteurOrdinnal.isEmpty()) {
+ throw new ExecutionException(ERREUR_RETOUR);
+ }
+ }
+}
diff --git a/src/interpreteurlir/programmes/tests/TestEtiquette.java b/src/interpreteurlir/programmes/tests/TestEtiquette.java
new file mode 100644
index 0000000..6214ec0
--- /dev/null
+++ b/src/interpreteurlir/programmes/tests/TestEtiquette.java
@@ -0,0 +1,219 @@
+/**
+ * TestEtiquette.java 13 mai 2021
+ * IUT Rodez info1 2020-2021, pas de copyright, aucun droit
+ */
+package interpreteurlir.programmes.tests;
+
+import static info1.outils.glg.Assertions.*;
+
+import interpreteurlir.InterpreteurException;
+import interpreteurlir.programmes.Etiquette;
+
+/**
+ * Tests unitaires de {@link Etiquette}
+ * @author Nicolas Caminade
+ * @author Sylvan Courtiol
+ * @author Pierre Debas
+ * @author Heïa Dexter
+ * @author Lucas Vabre
+ */
+public class TestEtiquette {
+
+ /** Jeu de données valides pour les tests */
+ private Etiquette[] fixture = {
+ new Etiquette(Etiquette.VALEUR_ETIQUETTE_MIN),
+ new Etiquette(10),
+ new Etiquette(15),
+ new Etiquette(8),
+ new Etiquette(18),
+ new Etiquette(1500),
+ new Etiquette(1501),
+ new Etiquette(Etiquette.VALEUR_ETIQUETTE_MAX),
+ new Etiquette("" +Etiquette.VALEUR_ETIQUETTE_MIN),
+ new Etiquette(" 10"),
+ new Etiquette("15 "),
+ new Etiquette("8"),
+ new Etiquette("18"),
+ new Etiquette("1500 "),
+ new Etiquette(" 1501 "),
+ new Etiquette("" + Etiquette.VALEUR_ETIQUETTE_MAX),
+ };
+
+ /**
+ * Tests unitaires de {@link Etiquette#Etiquette(int)}
+ */
+ public void testEtiquetteInt() {
+ System.out.println("\tExécution du test de Etiquette#Etiquette(int)");
+
+ final int[] INVALIDES = {
+ Integer.MIN_VALUE, -1, 0, 100000, Integer.MAX_VALUE
+ };
+
+ for (int valeur : INVALIDES) {
+ try {
+ new Etiquette(valeur);
+ echec();
+ } catch (InterpreteurException lancee) {
+
+ }
+ }
+
+ try {
+ new Etiquette(Etiquette.VALEUR_ETIQUETTE_MIN);
+ new Etiquette(10);
+ new Etiquette(15);
+ new Etiquette(8);
+ new Etiquette(18);
+ new Etiquette(1500);
+ new Etiquette(1501);
+ new Etiquette(Etiquette.VALEUR_ETIQUETTE_MAX);
+ } catch (InterpreteurException lancee) {
+ echec();
+ }
+ }
+
+ /**
+ * Tests unitaires de {@link Etiquette#Etiquette(String)}
+ */
+ public void testEtiquetteString() {
+ System.out.println("\tExécution du test de "
+ + "Etiquette#Etiquette(String)");
+
+ final String[] INVALIDES = {
+ null, "", "cinq",
+ "" + Integer.MIN_VALUE, "-1", " 0",
+ "100000 ", "" + Integer.MAX_VALUE
+ };
+
+ for (String valeur : INVALIDES) {
+ try {
+ new Etiquette(valeur);
+ echec();
+ } catch (InterpreteurException lancee) {
+
+ }
+ }
+
+ try {
+ new Etiquette("" +Etiquette.VALEUR_ETIQUETTE_MIN);
+ new Etiquette(" 10");
+ new Etiquette("15 ");
+ new Etiquette("8");
+ new Etiquette("18");
+ new Etiquette("1500 ");
+ new Etiquette(" 1501 ");
+ new Etiquette("" + Etiquette.VALEUR_ETIQUETTE_MAX);
+ } catch (InterpreteurException lancee) {
+ echec();
+ }
+ }
+
+ /**
+ * Tests unitaires de {@link Etiquette#toString()}
+ */
+ public void testToString() {
+ System.out.println("\tExécution du test de Etiquette#toString()");
+
+ final String[] TEXTE_ATTENDU = {
+ "1",
+ "10",
+ "15",
+ "8",
+ "18",
+ "1500",
+ "1501",
+ "99999",
+ "1",
+ "10",
+ "15",
+ "8",
+ "18",
+ "1500",
+ "1501",
+ "99999",
+ };
+
+ for (int numTest = 0 ; numTest < TEXTE_ATTENDU.length ; numTest++) {
+ assertEquivalence(fixture[numTest].toString(),
+ TEXTE_ATTENDU[numTest]);
+ }
+ }
+
+ /**
+ * Tests unitaires de {@link Etiquette#getValeur()}
+ */
+ public void testGetValeur() {
+ System.out.println("\tExécution du test de Etiquette#getValeur()");
+
+ final int[] VALEUR_ATTENDUE = {
+ 1,
+ 10,
+ 15,
+ 8,
+ 18,
+ 1500,
+ 1501,
+ 99999,
+ 1,
+ 10,
+ 15,
+ 8,
+ 18,
+ 1500,
+ 1501,
+ 99999,
+ };
+
+ for (int numTest = 0 ; numTest < VALEUR_ATTENDUE.length ; numTest++) {
+ assertEquivalence(fixture[numTest].getValeur(),
+ VALEUR_ATTENDUE[numTest]);
+ }
+ }
+
+ /**
+ * Test unitaires de {@link Etiquette#compareTo(Etiquette)}
+ */
+ public void testCompareTo() {
+ final Etiquette[] CROISSANTS = {
+ new Etiquette(Etiquette.VALEUR_ETIQUETTE_MIN),
+ new Etiquette(8),
+ new Etiquette(10),
+ new Etiquette(15),
+ new Etiquette(18),
+ new Etiquette(1500),
+ new Etiquette(1501),
+ new Etiquette(Etiquette.VALEUR_ETIQUETTE_MAX),
+ };
+
+ System.out.println("\tExécution du test de "
+ + "Etiquette#compareTo(Etiquette)");
+
+ /** Test croissant */
+ for (int reference = 0 ; reference < CROISSANTS.length ; reference++) {
+ for (int numtest = reference + 1 ;
+ numtest < CROISSANTS.length ;
+ numtest++) {
+ assertTrue(CROISSANTS[reference].compareTo(
+ CROISSANTS[numtest]) < 0);
+ }
+ }
+
+ /** Test décroissant */
+ for (int reference = CROISSANTS.length - 1 ;
+ reference > 0 ;
+ reference--) {
+
+ for (int numtest = reference - 1 ;
+ numtest >= 0 ;
+ numtest--) {
+ assertTrue(CROISSANTS[reference].compareTo(
+ CROISSANTS[numtest]) > 0);
+ }
+ }
+
+ Etiquette referenceEgalite = new Etiquette(666);
+ assertTrue(referenceEgalite.compareTo(referenceEgalite) == 0);
+ assertTrue(referenceEgalite.compareTo(new Etiquette("666")) == 0);
+ }
+
+}
diff --git a/src/interpreteurlir/programmes/tests/TestProgramme.java b/src/interpreteurlir/programmes/tests/TestProgramme.java
new file mode 100644
index 0000000..6674842
--- /dev/null
+++ b/src/interpreteurlir/programmes/tests/TestProgramme.java
@@ -0,0 +1,364 @@
+/**
+ * TestProgramme.java 14 mai 2021
+ * IUT-Rodez info1 2020-2021, pas de droits, pas de copyrights
+ */
+package interpreteurlir.programmes.tests;
+
+import interpreteurlir.programmes.*;
+import interpreteurlir.Contexte;
+import interpreteurlir.ExecutionException;
+import interpreteurlir.InterpreteurException;
+import interpreteurlir.expressions.Expression;
+import interpreteurlir.motscles.instructions.*;
+import static info1.outils.glg.Assertions.*;
+
+/**
+ * Tests unitaires de {@link Programme}
+ *
+ * @author Nicolas Caminade
+ * @author Sylvan Courtiol
+ * @author Pierre Debas
+ * @author Heia Dexter
+ * @author Lucas Vabre
+ */
+public class TestProgramme {
+
+ private Programme programmeTest = new Programme();
+
+ private Contexte contexteTest = new Contexte();
+
+ private final Etiquette[] JEU_ETIQUETTES = {
+ new Etiquette(1),
+ new Etiquette(10),
+ new Etiquette(13),
+ new Etiquette(5),
+ new Etiquette(31),
+ new Etiquette(40),
+ new Etiquette(5),
+ new Etiquette(89)
+ };
+
+ private final Instruction[] JEU_INSTRUCTIONS = {
+ new InstructionVar("$toto = \"toto\"", contexteTest),
+ new InstructionVar("tata = 0 + 0", contexteTest),
+ new InstructionVar("$titi = \"titi\"", contexteTest),
+ new InstructionEntre("agreu", contexteTest),
+ new InstructionEntre("tutu", contexteTest),
+ new InstructionVar("entier = 93", contexteTest),
+ new InstructionVar("$agreuagreu = \"agreu\"", contexteTest),
+ new InstructionVar("$youpi = \"youpi lapin\"", contexteTest)
+ };
+
+ private static final Etiquette[][] BORNES = {
+ { new Etiquette(6), new Etiquette(6) },
+ { new Etiquette(1), new Etiquette(90) },
+ { new Etiquette(31), new Etiquette(39) },
+ { new Etiquette(9), new Etiquette(41) }
+ };
+
+ private static final int DEBUT = 0;
+ private static final int FIN = 1;
+
+ private void ajoutLigne() {
+ for (int i = 0; i < JEU_ETIQUETTES.length; i++) {
+ programmeTest.ajouterLigne(JEU_ETIQUETTES[i], JEU_INSTRUCTIONS[i]);
+ }
+ }
+
+ /**
+ * Test unitaire de {@link Programme#Programme()}
+ */
+ public void testProgramme() {
+ System.out.println("\tExécution du test de Programme() : ");
+
+ try {
+ new Programme();
+ } catch (Exception lancee) {
+ echec();
+ }
+ }
+
+ /**
+ * Test unitaire de {@link Programme#ajouterLigne(Etiquette, Instruction)}
+ */
+ public void testAjouterLigne() {
+
+ final Etiquette[] ETIQUETTES_INVALIDES = {
+ null,
+ new Etiquette(1),
+ null,
+ };
+
+ final Instruction[] INSTRUCTIONS_INVALIDES = {
+ new InstructionEntre("janis", contexteTest),
+ null,
+ null
+ };
+
+ System.out.println("\tExécution du test de ajouterLigne() : ");
+
+ for (int i = 0; i < ETIQUETTES_INVALIDES.length; i++) {
+ try {
+ programmeTest.ajouterLigne(ETIQUETTES_INVALIDES[i],
+ INSTRUCTIONS_INVALIDES[i]);
+ echec();
+ } catch (NullPointerException lancee) {
+ // Test OK
+ }
+ }
+
+ for (int i = 0; i < JEU_ETIQUETTES.length; i++) {
+ try {
+ programmeTest.ajouterLigne(JEU_ETIQUETTES[i],
+ JEU_INSTRUCTIONS[i]);
+ } catch (NullPointerException lancee) {
+ echec();
+ }
+ }
+ }
+
+ /**
+ * Test unitaire de {@link Programme#toString()}
+ */
+ public void testToString() {
+
+ final String TEXTE_ATTENDU = "1 var $toto = \"toto\"\n"
+ + "5 var $agreuagreu = \"agreu\"\n"
+ + "10 var tata = 0 + 0\n"
+ + "13 var $titi = \"titi\"\n"
+ + "31 entre tutu\n"
+ + "40 var entier = 93\n"
+ + "89 var $youpi = \"youpi lapin\"\n";
+
+ ajoutLigne();
+ System.out.println("\tExécution du test de toString() : ");
+ assertEquivalence(TEXTE_ATTENDU, programmeTest.toString());
+ }
+
+ /**
+ * Test unitaire de {@link Programme#raz()}
+ */
+ public void testRaz() {
+
+ System.out.println("\tExécution du test de raz() : ");
+
+ programmeTest.raz();
+ assertEquivalence(programmeTest.toString(), "");
+
+ ajoutLigne();
+ programmeTest.raz();
+ assertEquivalence(programmeTest.toString(), "");
+ }
+
+ /**
+ * Test unitaire de {@link Programme#listeBornee(Etiquette, Etiquette)}
+ */
+ public void testListeBornee() {
+
+ final String[] TEXTES_ATTENDUS = {
+ "Aucune ligne de code dans cet intervalle.\n",
+ "1 var $toto = \"toto\"\n"
+ + "5 var $agreuagreu = \"agreu\"\n"
+ + "10 var tata = 0 + 0\n"
+ + "13 var $titi = \"titi\"\n"
+ + "31 entre tutu\n"
+ + "40 var entier = 93\n"
+ + "89 var $youpi = \"youpi lapin\"\n",
+ "31 entre tutu\n",
+ "10 var tata = 0 + 0\n"
+ + "13 var $titi = \"titi\"\n"
+ + "31 entre tutu\n"
+ + "40 var entier = 93\n",
+ };
+
+ final Etiquette[][] BORNES_INVALIDES = {
+ { new Etiquette(8), new Etiquette(6) },
+ { new Etiquette(10000), new Etiquette(90) }
+ };
+
+ ajoutLigne();
+
+ System.out.println("\tExécution du test de listeBornee() : ");
+
+ for (int i = 0; i < TEXTES_ATTENDUS.length; i++) {
+ assertEquivalence(TEXTES_ATTENDUS[i],
+ programmeTest.listeBornee(BORNES[i][DEBUT],
+ BORNES[i][FIN]));
+ }
+
+ for (int i = 0; i < BORNES_INVALIDES.length; i++) {
+ try {
+ programmeTest.listeBornee(BORNES_INVALIDES[i][DEBUT],
+ BORNES_INVALIDES[i][FIN]);
+ echec();
+ } catch (InterpreteurException lancee) {
+ // Test OK
+ }
+ }
+ }
+
+ /**
+ * Test unitaire de {@link Programme#effacer(Etiquette, Etiquette)}
+ */
+ public void testEffacer() {
+
+// final Etiquette[][] BORNES = {
+// { new Etiquette(6), new Etiquette(6) },
+// { new Etiquette(1), new Etiquette(90) },
+// { new Etiquette(31), new Etiquette(39) },
+// { new Etiquette(9), new Etiquette(41) }
+// };
+
+ final String[] TEXTES_ATTENDUS = {
+ "1 var $toto = \"toto\"\n"
+ + "5 var $agreuagreu = \"agreu\"\n"
+ + "10 var tata = 0 + 0\n"
+ + "13 var $titi = \"titi\"\n"
+ + "31 entre tutu\n"
+ + "40 var entier = 93\n"
+ + "89 var $youpi = \"youpi lapin\"\n",
+ "",
+ "1 var $toto = \"toto\"\n"
+ + "5 var $agreuagreu = \"agreu\"\n"
+ + "10 var tata = 0 + 0\n"
+ + "13 var $titi = \"titi\"\n"
+ + "40 var entier = 93\n"
+ + "89 var $youpi = \"youpi lapin\"\n",
+ "1 var $toto = \"toto\"\n"
+ + "5 var $agreuagreu = \"agreu\"\n"
+ + "89 var $youpi = \"youpi lapin\"\n",
+ };
+
+ final Etiquette[][] BORNES_INVALIDES = {
+ { new Etiquette(8), new Etiquette(6) },
+ { new Etiquette(10000), new Etiquette(90) }
+ };
+
+ System.out.println("\tExécution du test de effacer() : ");
+
+ for (int i = 0; i < BORNES.length ; i++) {
+ ajoutLigne();
+ programmeTest.effacer(BORNES[i][DEBUT], BORNES[i][FIN]);
+ assertEquivalence(programmeTest.toString(), TEXTES_ATTENDUS[i]);
+ }
+
+ for (int i = 0; i < BORNES_INVALIDES.length; i++) {
+ try {
+ programmeTest.effacer(BORNES_INVALIDES[i][DEBUT],
+ BORNES_INVALIDES[i][FIN]);
+ echec();
+ } catch (InterpreteurException lancee) {
+ // Test OK
+ }
+ }
+
+ }
+
+ /**
+ * Test unitaire de {@link Programme#stop()}
+ */
+ public void testStop() {
+ //TODO écrire les tests lorsque l'instruction stop sera définie
+
+ System.out.println("\tExécution du test de stop() : ");
+
+ echec();
+ }
+
+ /**
+ * Test unitaire de {@link Programme#lancer(Etiquette)}
+ */
+ public void testLancerEtiquette() {
+ final Etiquette[] ETIQUETTES_DEPART = {
+ new Etiquette(1),
+ new Etiquette(9),
+ new Etiquette(25),
+ new Etiquette(90)
+ };
+
+ Expression.referencerContexte(contexteTest);
+
+ ajoutLigne();
+
+ System.out.println("\tExécution du test de lancer(Etiquette) "
+ + "TEST INTERACTIF : ");
+
+ for (int i = 0; i < ETIQUETTES_DEPART.length; i++) {
+ System.out.println(programmeTest.listeBornee(ETIQUETTES_DEPART[i],
+ new Etiquette(9999)));
+
+ contexteTest.raz();
+ programmeTest.lancer(ETIQUETTES_DEPART[i]);
+ System.out.println(contexteTest.toString());
+ }
+ }
+
+ /**
+ * Test unitaire de {@link Programme#lancer()}
+ */
+ public void testLancer() {
+
+ Expression.referencerContexte(contexteTest);
+ contexteTest.raz();
+
+ ajoutLigne();
+
+ System.out.println("\tExécution du test de lancer() "
+ + "TEST INTERACTIF : ");
+ System.out.println(programmeTest.toString());
+ programmeTest.lancer();
+ System.out.println(contexteTest.toString());
+ }
+
+ /**
+ * Test unitaire de {@link Programme#appelProcedure(Etiquette)}
+ */
+ public void testAppelProcedure() {
+ //TODO écrire les tests
+
+ System.out.println("\tExécution du test de appelProcedure(Etiquette) "
+ + ": ");
+
+ echec();
+ }
+
+ /**
+ * Test unitaire de {@link Programme#retourProcedure()}
+ */
+ public void testRetourProcedure() {
+
+ System.out.println("\tExécution du test de retourProcedure() : ");
+
+ // Simulation du lancement du programme
+ programmeTest.appelProcedure(new Etiquette(1));
+ // Lancement de 2 procédures
+ programmeTest.appelProcedure(new Etiquette(100));
+ programmeTest.appelProcedure(new Etiquette(50));
+
+ try {
+ programmeTest.retourProcedure();
+ programmeTest.retourProcedure();
+ } catch (ExecutionException lancee) {
+ echec();
+ }
+
+ try {
+ programmeTest.retourProcedure();
+ echec();
+ } catch (ExecutionException lancee) {
+ // Test OK
+ }
+ }
+
+ /**
+ * Test unitaire de {@link Programme#vaen(Etiquette)}
+ */
+ public void testVaen() {
+ //TODO écrire les tests
+
+ System.out.println("\tExécution du test de vaen(Etiquette) "
+ + ": ");
+
+ echec();
+ }
+}