source: trunk/org.modelica.mdt.test/src/org/modelica/mdt/test/TestModelicaRoot.java @ 246

Last change on this file since 246 was 182, checked in by boris, 19 years ago
  • added code to prevent that system library node is added to non-modelica projects in projects view
File size: 8.7 KB
Line 
1/*
2 * This file is part of Modelica Development Tooling.
3 *
4 * Copyright (c) 2005, Linköpings universitet, Department of
5 * Computer and Information Science, PELAB
6 *
7 * All rights reserved.
8 *
9 * (The new BSD license, see also
10 * http://www.opensource.org/licenses/bsd-license.php)
11 *
12 *
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions are
15 * met:
16 *
17 * * Redistributions of source code must retain the above copyright
18 *   notice, this list of conditions and the following disclaimer.
19 *
20 * * Redistributions in binary form must reproduce the above copyright
21 *   notice, this list of conditions and the following disclaimer in
22 *   the documentation and/or other materials provided with the
23 *   distribution.
24 *
25 * * Neither the name of Linköpings universitet nor the names of its
26 *   contributors may be used to endorse or promote products derived from
27 *   this software without specific prior written permission.
28 *
29 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
30 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
31 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
32 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
33 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
34 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
35 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
36 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
37 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
39 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40 */
41
42package org.modelica.mdt.test;
43
44import java.util.Collections;
45import java.util.List;
46import java.util.Vector;
47
48import org.eclipse.core.resources.IProject;
49import org.eclipse.core.resources.ResourcesPlugin;
50import org.eclipse.core.runtime.CoreException;
51import org.eclipse.core.resources.IWorkspaceRoot;
52
53import org.eclipse.ui.PlatformUI;
54
55import org.modelica.mdt.MdtPlugin;
56import org.modelica.mdt.core.IModelicaElementChange;
57import org.modelica.mdt.core.IModelicaElementChangeListener;
58import org.modelica.mdt.core.IModelicaProject;
59import org.modelica.mdt.core.IModelicaRoot;
60import org.modelica.mdt.core.ModelicaCore;
61import org.modelica.mdt.test.util.Area51Projects;
62import org.modelica.mdt.test.util.Utility;
63
64import junit.framework.TestCase;
65
66/**
67 * @author Elmir Jagudin
68 */
69public class TestModelicaRoot extends TestCase
70{
71    /* this flags are set from the modelica element change listener */
72    private boolean simpleProjectAdded     = false;
73    private boolean modelicaProjectAdded   = false;
74    private boolean simpleProjectRemoved   = false;
75    private boolean modelicaProjectRemoved = false;
76   
77    public class ElementListener implements IModelicaElementChangeListener
78    {
79
80        public void elementsChanged(List<IModelicaElementChange> changes) 
81        {
82            for (IModelicaElementChange change : changes)
83            {
84                Object res = change.getElement();
85                if (!(res instanceof IModelicaProject))
86                {
87                    /* we are only interested in changes on projects */
88                    break;
89                }
90                IModelicaProject proj = (IModelicaProject)res;
91               
92                switch (change.getChangeType())
93                {
94                case ADDED:
95                    if (proj.getElementName().equals(PROJECT_NAME_SIM_EXTRA))
96                    {
97                        simpleProjectAdded = true;
98                    }
99                    else if (proj.getElementName().equals(PROJECT_NAME_MOD_EXTRA))
100                    {
101                        modelicaProjectAdded = true;
102                    }
103
104                    break;
105                case REMOVED:
106                    if (proj.getElementName().equals(PROJECT_NAME_SIM_EXTRA))
107                    {
108                        simpleProjectRemoved = true;
109                    }
110                    else if (proj.getElementName().equals(PROJECT_NAME_MOD_EXTRA))
111                    {
112                        modelicaProjectRemoved = true;
113                    }
114                }
115            }
116        }
117    }
118
119    /* names of modelica projects */
120    private Vector<String> modelicaProjects = new Vector<String>(2);
121   
122    /* names of simple (no modelica) projects */
123    private Vector<String> simpleProjects = new Vector<String>(2);
124   
125    private static final String PROJECT_NAME_1 = 
126        TestModelicaRoot.class.getName() + "1";
127    private static final String PROJECT_NAME_2 = 
128        TestModelicaRoot.class.getName() + "2";
129    private static final String PROJECT_NAME_3 = 
130        TestModelicaRoot.class.getName() + "3";
131   
132    /* the SIMple project which is added and removed */
133    private static final String PROJECT_NAME_SIM_EXTRA = 
134        TestModelicaRoot.class.getName() + "_SIM";
135
136    /* the MODelica project which is added and removed */
137    private static final String PROJECT_NAME_MOD_EXTRA = 
138        TestModelicaRoot.class.getName() + "_MOD";
139
140    private IWorkspaceRoot workspaceRoot = 
141            ResourcesPlugin.getWorkspace().getRoot();   
142    private IModelicaRoot modelicaRoot = 
143            ModelicaCore.getModelicaRoot();
144   
145    @Override
146    protected void setUp() throws CoreException
147    {
148        Area51Projects.createProjects();
149
150        /*
151         * create a modelica project
152         */
153        IProject project = 
154            ModelicaCore.createProject(PROJECT_NAME_1, 
155                    PlatformUI.getWorkbench().getActiveWorkbenchWindow());
156        assertNotNull("failed to create project", project);
157       
158        /*
159         * create a regular projects
160         */
161        project = workspaceRoot.getProject(PROJECT_NAME_2);
162        if (!project.exists())
163        {
164            project.create(null);
165            project.open(null);
166        }
167       
168        /*
169         * create a regular projects which remains closed
170         */
171        project = workspaceRoot.getProject(PROJECT_NAME_3);
172        if (!project.exists())
173        {
174            project.create(null);
175        }
176
177        assertTrue(Collections.addAll(modelicaProjects,
178                PROJECT_NAME_1));
179       
180        assertTrue(Collections.addAll(simpleProjects,
181                PROJECT_NAME_2, PROJECT_NAME_3));
182
183
184    }
185   
186    public void testProjectsEnumeration() throws CoreException
187    {
188 
189        IModelicaProject mproj;
190        for (Object p : modelicaRoot.getProjects())
191        {
192            mproj = (IModelicaProject)p;
193
194            if (modelicaProjects.contains(mproj.getElementName()))
195            {
196                if (mproj.getProject().isOpen())
197                {
198                    assertTrue("project without modelica nature wrapped",
199                        ((IModelicaProject)p).getProject().
200                        hasNature(MdtPlugin.MODELICA_NATURE));
201                }
202            }
203            else if (simpleProjects.contains(mproj.getElementName()))
204            {
205                if (mproj.getProject().isOpen())
206                {
207                    assertFalse("project with modelica nature not wrapped",
208                        mproj.getProject().hasNature(MdtPlugin.MODELICA_NATURE));
209                }
210            }
211        }
212    }
213   
214    /**
215     * Test adding and removing projects to the workspace and check
216     * if ModelicaRoot picks up the changes.
217     */
218    public void testChangesToWorkspace() throws CoreException
219    {
220        ModelicaCore.getModelicaRoot().
221            addModelicaElementChangeListener(new ElementListener());
222       
223        /*
224         * check if ModelicaRoot picks up additions of projects
225         */
226        IProject simpleProject = 
227            workspaceRoot.getProject(PROJECT_NAME_SIM_EXTRA);
228        simpleProject.create(null);
229        simpleProject.open(null);
230       
231        IProject modelicaProject = 
232            ModelicaCore.createProject(PROJECT_NAME_MOD_EXTRA, 
233                    PlatformUI.getWorkbench().getActiveWorkbenchWindow());
234        modelicaProject.open(null);
235
236       
237        /* wait for the changes to kick throug */
238        while (!simpleProjectAdded && !modelicaProjectAdded)
239        {
240            Utility.sleep(this, 105);
241        }
242       
243        boolean simpleProjFound = false;
244        boolean modelicaProjFound = false;
245
246        for (Object proj : modelicaRoot.getProjects())
247        {
248            if (proj instanceof IModelicaProject)
249            {
250                String name = ((IModelicaProject)proj).getElementName();
251
252                if (name.equals(PROJECT_NAME_MOD_EXTRA))
253                {
254                    modelicaProjFound = true;
255                }
256                else if (name.equals(PROJECT_NAME_SIM_EXTRA))
257                {
258                    simpleProjFound = true;
259                }
260            }
261        }       
262        assertTrue("ModelicaRoot did not pick up addition of " + 
263                PROJECT_NAME_SIM_EXTRA, simpleProjFound);
264       
265        assertTrue("ModelicaRoot did not pick up addition of " + 
266                PROJECT_NAME_MOD_EXTRA, modelicaProjFound);
267
268        /* check if ModelicaRoot picks up removal of a project */
269        simpleProject.delete(true, true, null);
270        modelicaProject.delete(true, true, null);
271       
272        /* wait for the changes to kick throug */
273        while (!simpleProjectRemoved && !modelicaProjectRemoved)
274        {
275            Utility.sleep(this, 97);
276        }
277
278        for (Object proj : modelicaRoot.getProjects())
279        {
280            if (proj instanceof IModelicaProject)
281            {
282                String name = ((IModelicaProject)proj).getElementName();
283
284                if (name.equals(PROJECT_NAME_MOD_EXTRA))
285                {
286                    fail("ModelicaRoot did not pick up removal of " +
287                            PROJECT_NAME_MOD_EXTRA);
288                }
289                else if (name.equals(PROJECT_NAME_SIM_EXTRA))
290                {
291                    fail("ModelicaRoot did not pick up removal of " +
292                            PROJECT_NAME_SIM_EXTRA);
293                }
294            }
295        }
296    }
297}
Note: See TracBrowser for help on using the repository browser.