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
|
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import org.junit.Assert;
import org.junit.Test;
/**
* Tests unitaires sur {@link ExpressionComputer}.
*
* @author Arnaud Brunet
*/
public class ExpressionComputerTest {
private ExpressionComputer computer = new ExpressionComputer();
/**
* Vérifie le bon fonctionnement du calcul.
*/
@Test
public void testSimple() {
// Opérations 'standard'
calculer("5 + 3", 8);
calculer("5 * 5 + 5", 30);
calculer("5 + 5 * 5", 30);
calculer("5 / 2", 2.5);
calculer("(5 + 3) * 2", 16);
calculer("floor(5.1)", 5);
calculer("floor(5.6)", 5);
calculer("if(5>3, 3, 5)", 3);
// Vérifie que l'on ne calcule pas le coté faux
calculer("if(5>3, 3, 5 / 0)", 3);
// Fonctions personnalisées
calculer("max(5, 2)", 5);
calculer("min(5, 2)", 2);
// Formules complexes
calculer("if(max(5, 2) == 2, 5, min(4, 7))", 4);
}
/**
* Test avec des variables
*/
@Test
public void testVariables() {
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("var1", new BigDecimal(5));
// On vérifie que la variable est bien utilisé
calculer("max(var1, 2)", variables, 5);
// On vérifie que la variable var1 ne faut plus rien
calculer("min(var1, -1)", new HashMap<String, Object>(), -1);
}
/**
* Test que l'expression est bien calculée.
* @param expression L'expression à calculer.
* @param expectedResult Le résultat attendu.
*/
private void calculer(String expression, Number expectedResult) {
calculer(expression, null, expectedResult);
}
/**
* Test que l'expression est bien calculée.
* @param expression L'expression à calculer.
* @param variables Les valeurs des variables dans l'expression.
* @param expectedResult Le résultat attendu.
*/
private void calculer(String expression, Map<String, Object> variables, Number expectedResult) {
Object result = computer.compute(expression, variables);
Assert.assertTrue(result.getClass().getName(), result instanceof BigDecimal);
Assert.assertEquals(NumberUtil.convertToBigDecimal(expectedResult), result);
}
} |
Partager