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

Last change on this file since 171 was 171, checked in by boris, 19 years ago
  • updated regression tests
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   
78    public class ElementListener implements IModelicaElementChangeListener
79    {
80
81        public void elementsChanged(List<IModelicaElementChange> changes) 
82        {
83            for (IModelicaElementChange change : changes)
84            {
85                Object res = change.getElement();
86                if (!(res instanceof IModelicaProject))
87                {
88                    /* we are only interested in changes on projects */
89                    break;
90                }
91                IModelicaProject proj = (IModelicaProject)res;
92               
93                switch (change.getChangeType())
94                {
95                case ADDED:
96                    if (proj.getElementName().equals(PROJECT_NAME_SIM_EXTRA))
97                    {
98                        simpleProjectAdded = true;
99                    }
100                    else if (proj.getElementName().equals(PROJECT_NAME_MOD_EXTRA))
101                    {
102                        modelicaProjectAdded = true;
103                    }
104
105                    break;
106                case REMOVED:
107                    if (proj.getElementName().equals(PROJECT_NAME_SIM_EXTRA))
108                    {
109                        simpleProjectRemoved = true;
110                    }
111                    else if (proj.getElementName().equals(PROJECT_NAME_MOD_EXTRA))
112                    {
113                        modelicaProjectRemoved = true;
114                    }
115                }
116            }
117        }
118    }
119
120    /* names of modelica projects */
121    private Vector<String> modelicaProjects = new Vector<String>(2);
122   
123    /* names of simple (no modelica) projects */
124    private Vector<String> simpleProjects = new Vector<String>(2);
125   
126    private static final String PROJECT_NAME_1 = 
127        TestModelicaRoot.class.getName() + "1";
128    private static final String PROJECT_NAME_2 = 
129        TestModelicaRoot.class.getName() + "2";
130    private static final String PROJECT_NAME_3 = 
131        TestModelicaRoot.class.getName() + "3";
132   
133    /* the SIMple project which is added and removed */
134    private static final String PROJECT_NAME_SIM_EXTRA = 
135        TestModelicaRoot.class.getName() + "_SIM";
136
137    /* the MODelica project which is added and removed */
138    private static final String PROJECT_NAME_MOD_EXTRA = 
139        TestModelicaRoot.class.getName() + "_MOD";
140
141    private IWorkspaceRoot workspaceRoot = 
142            ResourcesPlugin.getWorkspace().getRoot();   
143    private IModelicaRoot modelicaRoot = 
144            ModelicaCore.getModelicaRoot();
145   
146    @Override
147    protected void setUp() throws CoreException
148    {
149        Area51Projects.createProjects();
150
151        /*
152         * create a modelica project
153         */
154        IProject project = 
155            ModelicaCore.createProject(PROJECT_NAME_1, 
156                    PlatformUI.getWorkbench().getActiveWorkbenchWindow());
157        assertNotNull("failed to create project", project);
158       
159        /*
160         * create a regular projects
161         */
162        project = workspaceRoot.getProject(PROJECT_NAME_2);
163        if (!project.exists())
164        {
165            project.create(null);
166            project.open(null);
167        }
168       
169        /*
170         * create a regular projects which remains closed
171         */
172        project = workspaceRoot.getProject(PROJECT_NAME_3);
173        if (!project.exists())
174        {
175            project.create(null);
176        }
177
178        assertTrue(Collections.addAll(modelicaProjects,
179                PROJECT_NAME_1));
180       
181        assertTrue(Collections.addAll(simpleProjects,
182                PROJECT_NAME_2, PROJECT_NAME_3));
183
184
185    }
186   
187    public void testProjectsEnumeration() throws CoreException
188    {
189 
190        IModelicaProject mproj;
191        for (Object p : modelicaRoot.getProjects())
192        {
193            mproj = (IModelicaProject)p;
194
195            if (modelicaProjects.contains(mproj.getElementName()))
196            {
197                if (mproj.getProject().isOpen())
198                {
199                    assertTrue("project without modelica nature wrapped",
200                        ((IModelicaProject)p).getProject().
201                        hasNature(MdtPlugin.MODELICA_NATURE));
202                }
203            }
204            else if (simpleProjects.contains(mproj.getElementName()))
205            {
206                if (mproj.getProject().isOpen())
207                {
208                    assertFalse("project with modelica nature not wrapped",
209                        mproj.getProject().hasNature(MdtPlugin.MODELICA_NATURE));
210                }
211            }
212        }
213    }
214   
215    /**
216     * Test adding and removing projects to the workspace and check
217     * if ModelicaRoot picks up the changes.
218     */
219    public void testChangesToWorkspace() throws CoreException
220    {
221        ModelicaCore.getModelicaRoot().
222            addModelicaElementChangeListener(new ElementListener());
223       
224        /*
225         * check if ModelicaRoot picks up additions of projects
226         */
227        IProject simpleProject = 
228            workspaceRoot.getProject(PROJECT_NAME_SIM_EXTRA);
229        simpleProject.create(null);
230        simpleProject.open(null);
231       
232        IProject modelicaProject = 
233            ModelicaCore.createProject(PROJECT_NAME_MOD_EXTRA, 
234                    PlatformUI.getWorkbench().getActiveWorkbenchWindow());
235        modelicaProject.open(null);
236
237       
238        /* wait for the changes to kick throug */
239        while (!simpleProjectAdded && !modelicaProjectAdded)
240        {
241            Utility.sleep(this, 105);
242        }
243       
244        boolean simpleProjFound = false;
245        boolean modelicaProjFound = false;
246
247        for (Object proj : modelicaRoot.getProjects())
248        {
249            if (proj instanceof IModelicaProject)
250            {
251                String name = ((IModelicaProject)proj).getElementName();
252
253                if (name.equals(PROJECT_NAME_MOD_EXTRA))
254                {
255                    modelicaProjFound = true;
256                }
257                else if (name.equals(PROJECT_NAME_SIM_EXTRA))
258                {
259                    simpleProjFound = true;
260                }
261            }
262        }       
263        assertTrue("ModelicaRoot did not pick up addition of " + 
264                PROJECT_NAME_SIM_EXTRA, simpleProjFound);
265       
266        assertTrue("ModelicaRoot did not pick up addition of " + 
267                PROJECT_NAME_MOD_EXTRA, modelicaProjFound);
268
269        /* check if ModelicaRoot picks up removal of a project */
270        simpleProject.delete(true, true, null);
271        modelicaProject.delete(true, true, null);
272       
273        /* wait for the changes to kick throug */
274        while (!simpleProjectRemoved && !modelicaProjectRemoved)
275        {
276            Utility.sleep(this, 97);
277        }
278
279        for (Object proj : modelicaRoot.getProjects())
280        {
281            if (proj instanceof IModelicaProject)
282            {
283                String name = ((IModelicaProject)proj).getElementName();
284
285                if (name.equals(PROJECT_NAME_MOD_EXTRA))
286                {
287                    fail("ModelicaRoot did not pick up removal of " +
288                            PROJECT_NAME_MOD_EXTRA);
289                }
290                else if (name.equals(PROJECT_NAME_SIM_EXTRA))
291                {
292                    fail("ModelicaRoot did not pick up removal of " +
293                            PROJECT_NAME_SIM_EXTRA);
294                }
295            }
296        }
297    }
298}
Note: See TracBrowser for help on using the repository browser.