-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTestLexeur.java
More file actions
122 lines (102 loc) · 4.89 KB
/
Copy pathTestLexeur.java
File metadata and controls
122 lines (102 loc) · 4.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import java.util.ArrayList;
import compiler.ErrorException;
import compiler.Lexeur;
import non_terminaux.NonTerminal;
import terminaux.Token;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;
public class TestLexeur {
public static void main(String[] args) {
testLexeurFiles();
}
private static String readFile(String name) {
try {
return new String(Files.readAllBytes(Paths.get(name)));
} catch (IOException e) {
System.err.println("Erreur lors de la lecture du fichier : " + e.getMessage());
return null;
}
}
private static void assertTokens(ArrayList<Token> tokens, String[] expectedValues, int[] expectedCodes) {
if (tokens.size() != expectedValues.length) {
System.err.println("Erreur : Nombre de tokens incorrect");
return;
}
// Afficher les tokens générés et les valeurs attendues sur la même ligne
System.out.println("Comparaison des tokens :");
for (int i = 0; i < expectedValues.length; i++) {
Token actualToken = tokens.get(i);
String expectedValue = expectedValues[i];
int expectedCode = expectedCodes[i];
System.out.println("Index " + i + ":");
System.out.println(" Actual Token: " + actualToken.getValue() + ", Code: " + actualToken.getCode());
System.out.println(" Expected Value: " + expectedValue + ", Expected Code: " + expectedCode);
if (!actualToken.getValue().equals(expectedValue)) {
System.err.println("Erreur : Valeur de token incorrecte à l'index " + i);
System.err.println("Expected: " + expectedValue + ", Actual: " + actualToken.getValue());
return;
}
if (actualToken.getCode() != expectedCode) {
System.err.println("Erreur : Code de token incorrect à l'index " + i);
System.err.println("Expected: " + expectedCode + ", Actual: " + actualToken.getCode());
return;
}
}
System.out.println("Test réussi pour le fichier.\n");
}
public static void testFile(String filePath, String[] expectedValues, int[] expectedCodes) {
String input = readFile(filePath);
System.out.println("Fichier lu : " + filePath);
if (input == null) {
return;
}
Lexeur lexeur = new Lexeur(input);
lexeur.analyze();
if (!lexeur.getErrors().isEmpty()) {
NonTerminal.printErrors(lexeur.getErrors());
} else {
ArrayList<Token> tokens = lexeur.tokens;
assertTokens(tokens, expectedValues, expectedCodes);
}
}
// Valeurs attendues pour test1.txt
private static final String[] expectedOutput1Values = {
"x", "=", "ceci est un test", "NEWLINE", "y", "=", "None", "NEWLINE", "EOF"
};
private static final int[] expectedOutput1Codes = {
41, 50, 43, 20, 41, 50, 34, 20, 37
};
// Valeurs attendues pour test2.txt
private static final String[] expectedOutput2Values = {
"if", "x", ">", "10", ":", "NEWLINE", "BEGIN", "y", "=", "x", "NEWLINE", "END", "else", ":", "NEWLINE",
"BEGIN", "for", "i", "in", "range", "(", "4", ")", ":", "NEWLINE", "BEGIN", "y", "=", "-", "x", "NEWLINE",
"END", "END", "NEWLINE", "EOF"
};
private static final int[] expectedOutput2Codes = {
23, 41, 9, 42, 49, 20, 21, 41, 50, 41, 20, 22, 25, 49, 20, 21, 26, 41, 27, 41, 44, 42, 45, 49, 20, 21, 41,
50, 2, 41, 20, 22, 22, 20, 37
};
// Valeurs attendues pour test3.txt
private static final String[] expectedOutput3Values = {
"for", "i", "in", "range", "(", "5", ")", ":", "NEWLINE", "BEGIN", "print", "(", "i", ")", "NEWLINE", "END",
"NEWLINE", "EOF"
};
private static final int[] expectedOutput3Codes = {
26, 41, 27, 41, 44, 42, 45, 49, 20, 21, 35, 44, 41, 45, 20, 22, 20, 37
};
// Valeurs attendues pour test4.txt
private static final String[] expectedOutput4Values = {
"def", "add", "(", "a", ",", "b", ")", ":", "NEWLINE", "BEGIN", "return", "a", "+", "b", "NEWLINE", "END",
"result", "=", "add", "(", "3", ",", "4", ")", "NEWLINE", "EOF"
};
private static final int[] expectedOutput4Codes = {
29, 41, 44, 41, 48, 41, 45, 49, 20, 21, 28, 41, 1, 41, 20, 22, 41, 50, 41, 44, 42, 48, 42 ,45, 20, 37
};
public static void testLexeurFiles() {
testFile("src/test/ressources/test1.txt", expectedOutput1Values, expectedOutput1Codes);
testFile("src/test/ressources/test2.txt", expectedOutput2Values, expectedOutput2Codes);
testFile("src/test/ressources/test3.txt", expectedOutput3Values, expectedOutput3Codes);
testFile("src/test/ressources/test4.txt", expectedOutput4Values, expectedOutput4Codes);
}
}