View Javadoc
1   /*
2    * #%L
3    * IsisFish
4    * 
5    * $Id: EvaluatorHelperTest.java 4156 2014-12-09 11:27:18Z echatellier $
6    * $HeadURL: https://svn.codelutin.com/isis-fish/tags/isis-fish-4.4.0.2/src/test/java/fr/ifremer/isisfish/util/EvaluatorHelperTest.java $
7    * %%
8    * Copyright (C) 2009 - 2010 Ifremer, Code Lutin
9    * %%
10   * This program is free software: you can redistribute it and/or modify
11   * it under the terms of the GNU General Public License as
12   * published by the Free Software Foundation, either version 3 of the 
13   * License, or (at your option) any later version.
14   * 
15   * This program is distributed in the hope that it will be useful,
16   * but WITHOUT ANY WARRANTY; without even the implied warranty of
17   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18   * GNU General Public License for more details.
19   * 
20   * You should have received a copy of the GNU General Public 
21   * License along with this program.  If not, see
22   * <http://www.gnu.org/licenses/gpl-3.0.html>.
23   * #L%
24   */
25  
26  package fr.ifremer.isisfish.util;
27  
28  import java.lang.reflect.Method;
29  import java.util.HashMap;
30  import java.util.Map;
31  
32  import org.junit.Assert;
33  import org.junit.Test;
34  
35  import fr.ifremer.isisfish.AbstractIsisFishTest;
36  import fr.ifremer.isisfish.equation.EmigrationEquation;
37  import fr.ifremer.isisfish.equation.PopulationGrowth;
38  import fr.ifremer.isisfish.equation.PopulationGrowthReverse;
39  import fr.ifremer.isisfish.equation.PopulationReproductionEquation;
40  import fr.ifremer.isisfish.simulator.SimulationContext;
41  import fr.ifremer.isisfish.simulator.SimulationPreScript;
42  
43  /**
44   * Test class for {@link EvaluatorHelper}.
45   *
46   * @author chatellier
47   * @version $Revision: 4156 $
48   * 
49   * Last update : $Date: 2014-12-09 12:27:18 +0100 (Tue, 09 Dec 2014) $
50   * By : $Author: echatellier $
51   */
52  public class EvaluatorHelperTest extends AbstractIsisFishTest {
53  
54      /**
55       * Test #normalizeClassName().
56       */
57      @Test
58      public void testNormalizeClassName() {
59          Assert.assertEquals("Test", EvaluatorHelper.normalizeClassName("Test"));
60          Assert.assertEquals("Te_t", EvaluatorHelper.normalizeClassName("Te/t"));
61          Assert.assertEquals("org_test_Test", EvaluatorHelper
62                  .normalizeClassName("org.test.Test"));
63      }
64  
65      /**
66       * Test #check().
67       */
68      @Test
69      public void testCheck() {
70          String equationContent = "return 12.0;";
71  
72          int result = EvaluatorHelper.check(EmigrationEquation.class,
73                  equationContent, null);
74          Assert.assertEquals(0, result);
75      }
76  
77      /**
78       * Test #evaluate().
79       */
80      @Test
81      public void testEvaluate() {
82          String equationContent = "return age * 2.0;";
83  
84          Object result = EvaluatorHelper.evaluate("fr.isisfish.equation",
85                  "TestEvaluate", PopulationGrowth.class, equationContent, /*context*/null, /*length*/2.0, /*group*/null);
86  
87          Assert.assertNotNull(result);
88          Assert.assertEquals("4.0", result.toString());
89      }
90  
91      /**
92       * Test #evaluate() but twice to check that previous
93       * class don't stay in class loader.
94       */
95      @Test
96      public void testDoubleContentEvaluate() {
97  
98          Map<String, Object> args = new HashMap<String, Object>();
99          args.put("context", null);
100         args.put("length", 2.0);
101         args.put("group", null);
102 
103         String equationContent = "return length * 2.0;";
104         Object result = EvaluatorHelper.evaluate("fr.isisfish.equation",
105                 "TestDoubleContentEvaluate", PopulationGrowthReverse.class,
106                 equationContent, /*context*/null, /*length*/2.0, /*group*/null);
107         Assert.assertNotNull(result);
108         Assert.assertEquals("4.0", result.toString());
109 
110         equationContent = "return length * 3.0;";
111         result = EvaluatorHelper.evaluate("fr.isisfish.equation",
112                 "TestDoubleContentEvaluate", PopulationGrowthReverse.class,
113                 equationContent, /*context*/null, /*length*/2.0, /*group*/null);
114         Assert.assertNotNull(result);
115         Assert.assertEquals("6.0", result.toString());
116     }
117     
118     /**
119      * Test que le repertoire des scripts en bien présent
120      * dans le classpath de compilation.
121      */
122     @Test
123     public void testEquationWithDatabaseContent() {
124 
125         String equationContent = "String name = scripts.ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP;";
126         equationContent += "return length * 2.0;";
127         Object result = EvaluatorHelper.evaluate("fr.isisfish.equation",
128                 "TestEquationWithDatabaseContent", PopulationGrowthReverse.class,
129                 equationContent, /*context*/null, /*length*/2.0, /*group*/null);
130         Assert.assertNotNull(result);
131         Assert.assertEquals("4.0", result.toString());
132     }
133     
134     /**
135      * Test that commons logging logger in present for use in equation.
136      */
137     @Test
138     public void testEquationWithLogger() {
139 
140         String equationContent = "log.info(\"Test logger\");";
141         equationContent += "return 1.0;";
142         Object result = EvaluatorHelper.evaluate("fr.isisfish.equation",
143                 "TestEquationWithDatabaseContent", PopulationGrowthReverse.class,
144                 equationContent, /*context*/null, /*length*/2.0, /*group*/null);
145         Assert.assertNotNull(result);
146         Assert.assertEquals("1.0", result.toString());
147     }
148 
149     /**
150      * Test que le contenu du fichier java correspondant à l'equation est
151      * corectement généré.
152      * Notemment suite à l'utilsation de paranamer et aux retrait des
153      * annotations.
154      */
155     @Test
156     public void testGenerateContent() {
157         Class clazz = PopulationReproductionEquation.class;
158         Method method = clazz.getDeclaredMethods()[0];
159         String content = EvaluatorHelper.generateContent("fr.ifremer.isisfish.equation",
160                 "Test", method, "return 42.0;");
161         
162         Assert.assertTrue(content.contains("fr.ifremer.isisfish.simulator.SimulationContext context"));
163         Assert.assertTrue(content.contains("java.util.List<PopulationGroup> groups"));
164     }
165 
166     /**
167      * Test d'execution d'un prescript.
168      */
169     @Test
170     public void testPrescriptContent() {
171         String content = "if (context != null) {\n" +
172                 "  // test\n" +
173                 "}\n";
174         EvaluatorHelper.evaluate("fr.isisfish.prescript",
175                 "TestPrescript", SimulationPreScript.class, content, /*context*/SimulationContext.get(), /*db*/null);
176     }
177 }