104 lines
3.2 KiB
Java
104 lines
3.2 KiB
Java
|
import org.junit.*;
|
||
|
import static org.junit.Assert.*;
|
||
|
import java.lang.reflect.Constructor;
|
||
|
import java.lang.reflect.Method;
|
||
|
import java.lang.reflect.Field;
|
||
|
import java.lang.reflect.Modifier;
|
||
|
import java.awt.Color;
|
||
|
|
||
|
/**
|
||
|
* Programme de test pour vérifier la bonne mise en oeuvre de la généralisation.
|
||
|
*
|
||
|
* @author Xavier Crégut <Prenom.Nom@enseeiht.fr>
|
||
|
*/
|
||
|
|
||
|
public class GeneralisationTest {
|
||
|
|
||
|
private Method getDeclaredMethod(Class<?> classe, String name, Class<?>... args) {
|
||
|
try {
|
||
|
return classe.getDeclaredMethod(name, args);
|
||
|
}
|
||
|
catch (NoSuchMethodException e) {
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private Constructor<?> getDeclaredConstructor(Class<?> classe, Class<?>... args) {
|
||
|
try {
|
||
|
return classe.getDeclaredConstructor(args);
|
||
|
}
|
||
|
catch (NoSuchMethodException e) {
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private Field getDeclaredField(Class<?> classe, String name) {
|
||
|
try {
|
||
|
return classe.getDeclaredField(name);
|
||
|
}
|
||
|
catch (NoSuchFieldException e) {
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void verifierLaSuperClasse(Class<?> superClasse) {
|
||
|
Method getCouleurMethod = getDeclaredMethod(superClasse, "getCouleur");
|
||
|
assertTrue("Pourquoi ne pas factoriser getCouleur() dans "
|
||
|
+ superClasse.getName() + " ?",
|
||
|
getCouleurMethod != null);
|
||
|
|
||
|
Method setCouleurMethod = getDeclaredMethod(superClasse, "setCouleur", Color.class);
|
||
|
assertTrue("Pourquoi ne pas factoriser setCouleur() dans "
|
||
|
+ superClasse.getName() + " ?",
|
||
|
setCouleurMethod != null);
|
||
|
|
||
|
Field couleurField = getDeclaredField(superClasse, "couleur");
|
||
|
assertTrue("Pourquoi ne pas factoriser l'attribut 'couleur' dans "
|
||
|
+ superClasse.getName() + " ?",
|
||
|
couleurField != null);
|
||
|
assertTrue("L'attribut 'couleur' devrait être privé !",
|
||
|
Modifier.isPrivate(couleurField.getModifiers()));
|
||
|
assertFalse("Pourquoi ne pas définir getCouleur() dans "
|
||
|
+ superClasse.getName() + " ?",
|
||
|
Modifier.isAbstract(getCouleurMethod.getModifiers()));
|
||
|
assertFalse("Pourquoi ne pas définir setCouleur() dans "
|
||
|
+ superClasse.getName() + " ?",
|
||
|
Modifier.isAbstract(setCouleurMethod.getModifiers()));
|
||
|
|
||
|
Constructor<?> constructeur = getDeclaredConstructor(superClasse, Color.class);
|
||
|
assertTrue("Pourquoi ne pas définir un constructeur pour initialiser"
|
||
|
+ " la couleur dans " + superClasse.getName() + " ?",
|
||
|
constructeur != null);
|
||
|
}
|
||
|
|
||
|
private void verifierGestionCouleur(Class<?> uneClasse) {
|
||
|
Class<?> superClasse = uneClasse.getSuperclass();
|
||
|
assertFalse("Il faut d'abord faire marcher ExempleSchemaTab !",
|
||
|
Object.class.equals(superClasse));
|
||
|
|
||
|
// Vérifier la super-classe
|
||
|
verifierLaSuperClasse(superClasse);
|
||
|
|
||
|
assertTrue("Pourquoi redéfinir la méthode getCouleur() dans "
|
||
|
+ uneClasse.getName() + " ?",
|
||
|
null == getDeclaredMethod(uneClasse, "getCouleur"));
|
||
|
assertTrue("Pourquoi redéfinir la méthode setCouleur() dans "
|
||
|
+ uneClasse.getName() + " ?",
|
||
|
null == getDeclaredMethod(uneClasse, "setCouleur", Color.class));
|
||
|
assertTrue("Pourquoi ne pas supprimer l'attribut 'couleur' de "
|
||
|
+ uneClasse.getName() + " ?",
|
||
|
null == getDeclaredField(uneClasse, "couleur"));
|
||
|
}
|
||
|
|
||
|
@Test
|
||
|
public void testerGeneralisationPoint() {
|
||
|
verifierGestionCouleur(Point.class);
|
||
|
}
|
||
|
|
||
|
@Test
|
||
|
public void testerGeneralisationSegment() {
|
||
|
verifierGestionCouleur(Segment.class);
|
||
|
}
|
||
|
|
||
|
}
|