View Javadoc
1   /*
2    * #%L
3    * IsisFish
4    * 
5    * $Id: DependencyUtilTest.java 4277 2015-06-21 17:24:03Z echatellier $
6    * $HeadURL: https://svn.codelutin.com/isis-fish/tags/isis-fish-4.4.0.2/src/test/java/fr/ifremer/isisfish/util/DependencyUtilTest.java $
7    * %%
8    * Copyright (C) 2014 Ifremer, Code Lutin, Chatellier Eric
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  package fr.ifremer.isisfish.util;
26  
27  import java.io.File;
28  import java.io.IOException;
29  import java.util.Collections;
30  import java.util.Set;
31  
32  import org.junit.Assert;
33  import org.junit.Test;
34  
35  import fr.ifremer.isisfish.AbstractIsisFishTest;
36  import fr.ifremer.isisfish.IsisFish;
37  import fr.ifremer.isisfish.IsisFishException;
38  import fr.ifremer.isisfish.datastore.JavaSourceStorage;
39  import fr.ifremer.isisfish.datastore.RuleStorage;
40  import fr.ifremer.isisfish.datastore.ScriptStorage;
41  import fr.ifremer.isisfish.datastore.SimulatorStorage;
42  
43  /**
44   * Test concernant la gestion du bytecode des scripts utilisateur.
45   * 
46   * @author Eric Chatellier
47   */
48  public class DependencyUtilTest extends AbstractIsisFishTest {
49  
50      /**
51       * Extract dependency for test.
52       * 
53       * @param storage storage
54       * @return deps
55       * @throws IsisFishException 
56       */
57      protected static Set<String> extractDependencies(JavaSourceStorage storage) throws IsisFishException {
58          String clazzName = storage.getCodeClass().getName();
59          File classFile = new File(IsisFish.config.getCompileDirectory(), clazzName.replace('.', File.separatorChar) + ".class");
60          Set<String> result = DependencyUtil.extractDependencies(IsisFish.config.getCompileDirectory(), Collections.singletonList(classFile));
61          return result;
62      }
63  
64      /**
65       * Récupère une classe parmis les scripts de test et vérifie que les dépendances sont bien
66       * extraites.
67       * 
68       * @throws IsisFishException 
69       * @throws IOException 
70       */
71      @Test
72      public void testExtractDependencies1() throws IsisFishException, IOException {
73          SimulatorStorage script = SimulatorStorage.getSimulator("SimulatorEffortByCell");
74          Set<String> deps = extractDependencies(script);
75          // premier niveau
76          Assert.assertTrue(deps.contains("simulators.DefaultSimulator"));
77          // deuxieme niveau de dependance
78          Assert.assertTrue(deps.contains("scripts.SiMatrix"));
79          Assert.assertTrue(deps.contains("scripts.GravityModel"));
80          // troisieme niveau
81          Assert.assertTrue(deps.contains("scripts.MinimisationUtil"));
82          Assert.assertTrue(deps.contains("scripts.ObjectiveFunction"));
83          Assert.assertTrue(deps.contains("scripts.ObjectiveFunctionBaranov"));
84      }
85      
86      /**
87       * Récupère une classe parmis les scripts de test et vérifie que les dépendances sont bien
88       * extraites.
89       * 
90       * @throws IsisFishException 
91       * @throws IOException 
92       */
93      @Test
94      public void testExtractDependencies2() throws IsisFishException, IOException {
95          SimulatorStorage script = SimulatorStorage.getSimulator("DefaultSimulator");
96          Set<String> deps = extractDependencies(script);
97          Assert.assertTrue(deps.contains("scripts.GravityModel"));
98          Assert.assertTrue(deps.contains("scripts.ResultName"));
99          Assert.assertTrue(deps.contains("scripts.SiMatrix"));
100         
101     }
102     
103     /**
104      * Récupère une classe parmis les scripts de test et vérifie que les dépendances sont bien
105      * extraites.
106      * 
107      * @throws IsisFishException 
108      * @throws IOException 
109      */
110     @Test
111     public void testExtractDependencies3() throws IsisFishException, IOException {
112         RuleStorage script = RuleStorage.getRule("Cantonnement");
113         Set<String> deps = extractDependencies(script);
114         Assert.assertTrue(deps.contains("scripts.ResultName"));
115     }
116     
117     /**
118      * Récupère une classe parmis les scripts de test et vérifie que les dépendances sont bien
119      * extraites.
120      * 
121      * @throws IsisFishException 
122      * @throws IOException 
123      */
124     @Test
125     public void testExtractDependencies4() throws IsisFishException, IOException {
126         ScriptStorage script = ScriptStorage.getScript("SiMatrix");
127         Set<String> deps = extractDependencies(script);
128         Assert.assertTrue(deps.contains("scripts.ObjectiveFunctionBaranov"));
129         Assert.assertTrue(deps.contains("scripts.ObjectiveFunction"));
130         Assert.assertTrue(deps.contains("scripts.MinimisationUtil"));
131         Assert.assertTrue(deps.contains("scripts.ResultName"));
132     }
133     
134     /**
135      * Récupère une classe parmis les scripts de test et vérifie que les dépendances sont bien
136      * extraites.
137      * 
138      * @throws IsisFishException 
139      * @throws IOException 
140      */
141     @Test
142     public void testExtractDependencies5() throws IsisFishException, IOException {
143         ScriptStorage script = ScriptStorage.getScript("GravityModel");
144         Set<String> deps = extractDependencies(script);
145         Assert.assertTrue(deps.contains("scripts.SiMatrix"));
146         Assert.assertTrue(deps.contains("scripts.ResultName"));
147     }
148     
149     /**
150      * Récupère une classe parmis les scripts de test et vérifie que les dépendances sont bien
151      * extraites.
152      * 
153      * @throws IsisFishException 
154      * @throws IOException 
155      */
156     @Test
157     public void testExtractDependencies6() throws IsisFishException, IOException {
158         ScriptStorage script = ScriptStorage.getScript("ObjectiveFunctionBaranov");
159         Set<String> deps = extractDependencies(script);
160         Assert.assertTrue(deps.contains("scripts.ObjectiveFunction"));
161     }
162     
163     /**
164      * Test que les inners types (anonyme $1) ne sont pas extrait.
165      * 
166      * @throws IsisFishException 
167      * @throws IOException 
168      */
169     @Test
170     public void testExtractDependencies7() throws IsisFishException, IOException {
171         RuleStorage script = RuleStorage.getRule("GraviteVPUE1");
172         Set<String> deps = extractDependencies(script);
173         Assert.assertFalse(deps.contains("rules.GraviteVPUE1$1"));
174     }
175     
176     /**
177      * Test que les classes de résultats sont bien extraites en incluant les dépendances
178      * récursives entre les résultats.
179      * 
180      * @throws IsisFishException 
181      * @throws IOException 
182      */
183     @Test
184     public void testExtractDependencies8() throws IsisFishException, IOException {
185         RuleStorage script = RuleStorage.getRule("Cantonnement");
186         Set<String> deps = extractDependencies(script);
187         Assert.assertTrue(deps.contains("resultinfos.MatrixTestDep1"));
188         Assert.assertTrue(deps.contains("resultinfos.MatrixTestDep2"));
189         Assert.assertTrue(deps.contains("resultinfos.MatrixTestDep3"));
190     }
191 }