svn commit: r14029 - trunk: src_new/org/argouml/profile tests/org/argouml tests/org/argouml/kernel tests/org/argouml/profile tests/org/argouml/profile/internal

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: euluis
Date: 2008-01-07 16:20:26-0800
New Revision: 14029

Added:
   trunk/tests/org/argouml/FileHelper.java   (contents, props changed)
   trunk/tests/org/argouml/profile/ProfileMother.java   (contents, props changed)
   trunk/tests/org/argouml/profile/TestProfileMother.java   (contents, props changed)
   trunk/tests/org/argouml/profile/TestUserDefinedProfile.java   (contents, props changed)
Modified:
   trunk/src_new/org/argouml/profile/ProfileFacade.java
   trunk/tests/org/argouml/kernel/TestProjectWithProfiles.java
   trunk/tests/org/argouml/profile/TestProfileManager.java
   trunk/tests/org/argouml/profile/internal/TestProfileManagerImpl.java

Log:
Issue 4946: adding a failing test.

Modified: trunk/src_new/org/argouml/profile/ProfileFacade.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/profile/ProfileFacade.java?view=diff&rev=14029&p1=trunk/src_new/org/argouml/profile/ProfileFacade.java&p2=trunk/src_new/org/argouml/profile/ProfileFacade.java&r1=14028&r2=14029
==============================================================================
--- trunk/src_new/org/argouml/profile/ProfileFacade.java	(original)
+++ trunk/src_new/org/argouml/profile/ProfileFacade.java	2008-01-07 16:20:26-0800
@@ -77,5 +77,12 @@
     }
 
     private static ProfileManager manager;
+
+    /**
+     * @return true is subsystem is initialized or false otherwise
+     */
+    public static boolean isInitiated() {
+        return manager != null;
+    }
     
 }

Added: trunk/tests/org/argouml/FileHelper.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/tests/org/argouml/FileHelper.java?view=auto&rev=14029
==============================================================================
--- (empty file)
+++ trunk/tests/org/argouml/FileHelper.java	2008-01-07 16:20:26-0800
@@ -0,0 +1,70 @@
+// $Id$
+// Copyright (c) 2008 The Regents of the University of California. All
+// Rights Reserved. Permission to use, copy, modify, and distribute this
+// software and its documentation without fee, and without a written
+// agreement is hereby granted, provided that the above copyright notice
+// and this paragraph appear in all copies. This software program and
+// documentation are copyrighted by The Regents of the University of
+// California. The software program and documentation are supplied "AS
+// IS", without any accompanying services from The Regents. The Regents
+// does not warrant that the operation of the program will be
+// uninterrupted or error-free. The end-user understands that the program
+// was developed for research purposes and is advised not to rely
+// exclusively on the program for any reason. IN NO EVENT SHALL THE
+// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
+// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
+// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
+// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
+// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
+// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
+// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
+// UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
+package org.argouml;
+
+import java.io.File;
+
+/**
+ * Helper for common File related operations used in automated tests.
+ *
+ * @author Luis Sergio Oliveira (euluis)
+ */
+public class FileHelper {
+
+    /**
+     * System temporary directory property name.
+     */
+    public static final String SYSPROPNAME_TMPDIR = "java.io.tmpdir";
+
+
+    public static File getTmpDir() {
+        return new File(System.getProperty(SYSPROPNAME_TMPDIR));
+    }
+
+    /**
+     * Setup a directory with the given name for the caller test.
+     * 
+     * @param dirName the directory to be created in the system temporary dir
+     * @return the created directory
+     */
+    public static File setUpDir4Test(String dirName) {
+        File generationDir = new File(getTmpDir(), dirName);
+        generationDir.mkdirs();
+        return generationDir;
+    }
+    
+    public static File setUpDir4Test(Class<?> testClass) {
+        String name = testClass.getPackage().getName() + "." 
+            + testClass.getSimpleName();
+        return setUpDir4Test(name);
+    }
+    
+    public static void deleteDir(File dir) {
+        if (dir != null && dir.exists()) {
+            dir.delete();
+        }
+    }
+
+}

Modified: trunk/tests/org/argouml/kernel/TestProjectWithProfiles.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/tests/org/argouml/kernel/TestProjectWithProfiles.java?view=diff&rev=14029&p1=trunk/tests/org/argouml/kernel/TestProjectWithProfiles.java&p2=trunk/tests/org/argouml/kernel/TestProjectWithProfiles.java&r1=14028&r2=14029
==============================================================================
--- trunk/tests/org/argouml/kernel/TestProjectWithProfiles.java	(original)
+++ trunk/tests/org/argouml/kernel/TestProjectWithProfiles.java	2008-01-07 16:20:26-0800
@@ -24,13 +24,18 @@
 
 package org.argouml.kernel;
 
+import static org.argouml.model.Model.getCoreFactory;
+import static org.argouml.model.Model.getExtensionMechanismsHelper;
 import static org.argouml.model.Model.getFacade;
+import static org.argouml.model.Model.getModelManagementFactory;
 
 import java.io.File;
 import java.lang.reflect.Method;
+import java.util.Collection;
 
 import junit.framework.TestCase;
 
+import org.argouml.FileHelper;
 import org.argouml.application.helpers.ApplicationVersion;
 import org.argouml.model.InitializeModel;
 import org.argouml.model.Model;
@@ -39,6 +44,8 @@
 import org.argouml.profile.Profile;
 import org.argouml.profile.ProfileFacade;
 import org.argouml.profile.ProfileManager;
+import org.argouml.profile.ProfileMother;
+import org.argouml.profile.UserDefinedProfile;
 import org.argouml.profile.init.InitProfileSubsystem;
 
 /**
@@ -50,6 +57,8 @@
  */
 public class TestProjectWithProfiles extends TestCase {
 
+    private File testCaseDir;
+
     /*
      * @see junit.framework.TestCase#setUp()
      */
@@ -60,13 +69,21 @@
         new InitProfileSubsystem().init();
         
         if (ApplicationVersion.getVersion() == null) {
-            Class<?> argoVersionClass = 
+            Class argoVersionClass = 
                 Class.forName("org.argouml.application.ArgoVersion");
             Method initMethod = argoVersionClass.getDeclaredMethod("init");
             initMethod.setAccessible(true);
             initMethod.invoke(null);
             assertNotNull(ApplicationVersion.getVersion());
         }
+        String testCaseDirName = getClass().getPackage().getName();
+        testCaseDir = FileHelper.setUpDir4Test(testCaseDirName);
+    }
+    
+    @Override
+    protected void tearDown() throws Exception {
+        FileHelper.deleteDir(testCaseDir);
+        super.tearDown();
     }
 
     public void testCreatedProjectContainsProfileConfiguration() {
@@ -142,11 +159,9 @@
                 returnParamType);
         assertNotNull(project.findType("Foo", false));
         // save the project into a new file
-        File file = getFileInUsersTemporaryDirectory(
+        File file = getFileInTestDir(
                 "testRemoveProfileWithModelThatRefersToProfile.zargo");
-        AbstractFilePersister persister = 
-            PersistenceManager.getInstance().getPersisterFromFileName(
-                    file.getAbsolutePath());
+        AbstractFilePersister persister = getProjectPersister(file);
         project.setVersion(ApplicationVersion.getVersion());
         persister.save(project, file);
         // reopen the project and assert that the Java profile isn't part of 
@@ -179,15 +194,82 @@
                 getFacade().getNamespace(returnParamType));
     }
 
-    private static final String SYSPROPNAME_TMPDIR = "java.io.tmpdir";
-
-    private File getFileInUsersTemporaryDirectory(String fileName) {
-        String tmpDirName = System.getProperty(SYSPROPNAME_TMPDIR);
-        String testCaseDirName = getClass().getPackage().getName();
-        File tmpDir = new File(tmpDirName);
-        File testCaseDir = new File(tmpDir, testCaseDirName);
-        testCaseDir.mkdir();
+    private File getFileInTestDir(String fileName) {
         return new File(testCaseDir, fileName);
     }
+    
+    /**
+     * WARNING: not a unit test, this is more like a functional test, where 
+     * several subsystems are tested.
+     * 
+     * This test does:
+     * <ol>
+     *   <li>setup a user defined profile</li>
+     *   <li>add it to the project configuration</li>
+     *   <li>create a dependency between the project's model and the user 
+     *   defined profile</li>
+     *   <li>save the project</li>
+     *   <li>load the project and assert that the model element that depends on 
+     *   the profile is consistent</li>
+     * </ol>
+     * 
+     * @throws Exception when things go wrong
+     */
+    public void testProjectWithUserDefinedProfilePersistency() 
+        throws Exception {
+        // setup a user defined profile
+        ProfileMother mother = new ProfileMother();
+        Object profileModel = mother.createSimpleProfileModel();
+        File userDefinedProfileFile = new File(testCaseDir, 
+                "testProjectWithUserDefinedProfilePersistency.xmi");
+        mother.saveProfileModel(profileModel, userDefinedProfileFile);
+        // add it to the project configuration
+        Profile userDefinedProfile = 
+            new UserDefinedProfile(userDefinedProfileFile);
+        ProfileManager profileManager = ProfileFacade.getManager();
+        profileManager.registerProfile(userDefinedProfile);
+        Project project = ProjectManager.getManager().makeEmptyProject();
+        project.getProfileConfiguration().addProfile(userDefinedProfile);
+        // create a dependency between the project's model and the user defined 
+        // profile
+        Object model = getModelManagementFactory().getRootModel();
+        Object fooClass = getCoreFactory().buildClass("Foo", model);
+        Collection stereotypes = getExtensionMechanismsHelper().getStereotypes(
+                project.getModels());
+        Object stStereotype = null;
+        for (Object stereotype : stereotypes) {
+            if (ProfileMother.STEREOTYPE_NAME_ST.equals(
+                    getFacade().getName(stereotype))) {
+                stStereotype = stereotype;
+                break;
+            }
+        }
+        Model.getCoreHelper().addStereotype(fooClass, stStereotype);
+        // save the project
+        File file = getFileInTestDir(
+            "testProjectWithUserDefinedProfilePersistency.zargo");
+        AbstractFilePersister persister = getProjectPersister(file);
+        project.setVersion(ApplicationVersion.getVersion());
+        persister.save(project, file);
+        // load the project
+        // FIXME: known failure here as documented in issue #4946
+        project = persister.doLoad(file);
+        project.postLoad();
+        // assert that the model element that depends on the profile is 
+        // consistent
+        fooClass = project.findType("Foo", false);
+        assertNotNull(fooClass);
+        Collection fooStereotypes = getFacade().getStereotypes(fooClass);
+        assertEquals(1, fooStereotypes.size());
+        assertEquals(ProfileMother.STEREOTYPE_NAME_ST, 
+                getFacade().getNamespace(fooStereotypes.iterator().next()));
+    }
+
+    private AbstractFilePersister getProjectPersister(File file) {
+        AbstractFilePersister persister = 
+            PersistenceManager.getInstance().getPersisterFromFileName(
+                    file.getAbsolutePath());
+        return persister;
+    }
 
 }

Added: trunk/tests/org/argouml/profile/ProfileMother.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/tests/org/argouml/profile/ProfileMother.java?view=auto&rev=14029
==============================================================================
--- (empty file)
+++ trunk/tests/org/argouml/profile/ProfileMother.java	2008-01-07 16:20:26-0800
@@ -0,0 +1,127 @@
+// $Id$
+// Copyright (c) 2007 The Regents of the University of California. All
+// Rights Reserved. Permission to use, copy, modify, and distribute this
+// software and its documentation without fee, and without a written
+// agreement is hereby granted, provided that the above copyright notice
+// and this paragraph appear in all copies. This software program and
+// documentation are copyrighted by The Regents of the University of
+// California. The software program and documentation are supplied "AS
+// IS", without any accompanying services from The Regents. The Regents
+// does not warrant that the operation of the program will be
+// uninterrupted or error-free. The end-user understands that the program
+// was developed for research purposes and is advised not to rely
+// exclusively on the program for any reason. IN NO EVENT SHALL THE
+// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
+// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
+// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
+// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
+// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
+// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
+// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
+// UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
+package org.argouml.profile;
+
+import static org.argouml.model.Model.getCoreHelper;
+import static org.argouml.model.Model.getExtensionMechanismsFactory;
+import static org.argouml.model.Model.getExtensionMechanismsHelper;
+import static org.argouml.model.Model.getFacade;
+import static org.argouml.model.Model.getModelManagementFactory;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.Logger;
+
+import org.argouml.model.Model;
+import org.argouml.model.XmiWriter;
+import org.argouml.persistence.UmlFilePersister;
+
+/**
+ * Based on the 
+ * <a href="http://www.xpuniverse.com/2001/pdfs/Testing03.pdf">ObjectMother 
+ * design pattern</a>, provides reusable facilities to create profiles.
+ *
+ * @author Luis Sergio Oliveira (euluis)
+ */
+public class ProfileMother {
+    
+    private static final Logger LOG = Logger.getLogger(ProfileMother.class);
+
+    /**
+     * "profile"
+     */
+    public static final String STEREOTYPE_NAME_PROFILE = "profile";
+    /**
+     * "st" the example stereotype name.
+     */
+    public static final String STEREOTYPE_NAME_ST = "st";
+
+    public Object createSimpleProfileModel() {
+        Object model = getModelManagementFactory().createModel();
+        Object profileStereotype = getProfileStereotype();
+        getCoreHelper().addStereotype(model, profileStereotype);
+        Object fooClass = Model.getCoreFactory().buildClass("foo", model);
+        getExtensionMechanismsFactory().buildStereotype(fooClass, 
+                STEREOTYPE_NAME_ST, model);
+        return model;
+    }
+
+    Object getProfileStereotype() {
+        Object umlProfile = getUmlProfileModel();
+        Collection<Object> models = new ArrayList<Object>();
+        models.add(umlProfile);
+        Collection stereotypes = getExtensionMechanismsHelper().getStereotypes(
+            models);
+        for (Object stereotype : stereotypes) {
+            if (STEREOTYPE_NAME_PROFILE.equals(
+                    Model.getFacade().getName(stereotype)))
+                return stereotype;
+        }
+        return null;
+    }
+    
+    private Object umlProfileModel;
+
+    Object getUmlProfileModel() {
+        if (ProfileFacade.isInitiated()) {
+            try {
+                umlProfileModel = ProfileFacade.getManager().getUMLProfile().
+                    getProfilePackages().iterator().next();
+                TestCase.assertTrue(getFacade().isAModel(umlProfileModel));
+            } catch (ProfileException e) {
+                LOG.error("Exception", e);
+            }
+        }
+        if (umlProfileModel == null) {
+            umlProfileModel = getModelManagementFactory().createModel();
+            getExtensionMechanismsFactory().buildStereotype(
+                umlProfileModel, STEREOTYPE_NAME_PROFILE, umlProfileModel);
+        }
+        return umlProfileModel;
+    }
+
+    public void saveProfileModel(Object model, File file) throws IOException {
+        FileOutputStream fileOut = new FileOutputStream(file);
+        try {
+            XmiWriter xmiWriter = Model.getXmiWriter(model, fileOut, "x(" 
+                    + UmlFilePersister.PERSISTENCE_VERSION + ")");
+            xmiWriter.write();
+            fileOut.flush();
+        } catch (Exception e) {
+            String msg = "Exception while saving profile model.";
+            LOG.error(msg, e);
+            throw new IOException(msg);
+        } finally {
+            fileOut.close();
+        }
+    }
+
+}

Modified: trunk/tests/org/argouml/profile/TestProfileManager.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/tests/org/argouml/profile/TestProfileManager.java?view=diff&rev=14029&p1=trunk/tests/org/argouml/profile/TestProfileManager.java&p2=trunk/tests/org/argouml/profile/TestProfileManager.java&r1=14028&r2=14029
==============================================================================
--- trunk/tests/org/argouml/profile/TestProfileManager.java	(original)
+++ trunk/tests/org/argouml/profile/TestProfileManager.java	2008-01-07 16:20:26-0800
@@ -46,7 +46,6 @@
 
     @Override
     protected void setUp() throws Exception {
-        super.setUp();
         InitializeModel.initializeDefault();
         new InitProfileSubsystem().init();
         mockProfile = new Profile() {

Added: trunk/tests/org/argouml/profile/TestProfileMother.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/tests/org/argouml/profile/TestProfileMother.java?view=auto&rev=14029
==============================================================================
--- (empty file)
+++ trunk/tests/org/argouml/profile/TestProfileMother.java	2008-01-07 16:20:26-0800
@@ -0,0 +1,92 @@
+// $Id$
+// Copyright (c) 2007 The Regents of the University of California. All
+// Rights Reserved. Permission to use, copy, modify, and distribute this
+// software and its documentation without fee, and without a written
+// agreement is hereby granted, provided that the above copyright notice
+// and this paragraph appear in all copies. This software program and
+// documentation are copyrighted by The Regents of the University of
+// California. The software program and documentation are supplied "AS
+// IS", without any accompanying services from The Regents. The Regents
+// does not warrant that the operation of the program will be
+// uninterrupted or error-free. The end-user understands that the program
+// was developed for research purposes and is advised not to rely
+// exclusively on the program for any reason. IN NO EVENT SHALL THE
+// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
+// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
+// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
+// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
+// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
+// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
+// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
+// UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
+package org.argouml.profile;
+
+import static org.argouml.model.Model.getExtensionMechanismsHelper;
+import static org.argouml.model.Model.getFacade;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.argouml.model.InitializeModel;
+import org.argouml.model.Model;
+
+import junit.framework.TestCase;
+
+/**
+ *
+ * @author Luis Sergio Oliveira (euluis)
+ */
+public class TestProfileMother extends TestCase {
+    
+    private ProfileMother mother;
+    private File testDir;
+
+    @Override
+    protected void setUp() throws Exception {
+        InitializeModel.initializeDefault();
+        mother = new ProfileMother();
+    }
+    
+    public void testCreateProfileModel() {
+        Object model = mother.createSimpleProfileModel();
+        assertNotNull(model);
+        Collection profileStereotypes = getFacade().getStereotypes(model);
+        assertEquals(1, profileStereotypes.size());
+        assertEquals(ProfileMother.STEREOTYPE_NAME_PROFILE, 
+            getFacade().getName(profileStereotypes.iterator().next()));
+    }
+    
+    public void testCreateSimpleProfileModel() throws Exception {
+        final Object model = mother.createSimpleProfileModel();
+        Collection<Object> models = new ArrayList<Object>() { {
+                add(model);
+            }
+        };
+        Collection stereotypes = 
+            getExtensionMechanismsHelper().getStereotypes(models);
+        Object st = null;
+        for (Object stereotype : stereotypes) {
+            if (ProfileMother.STEREOTYPE_NAME_ST.equals(
+                    getFacade().getName(stereotype))) {
+                st = stereotype;
+                break;
+            }
+        }
+        assertNotNull("\"st\" stereotype not found in model.", st);
+        assertTrue(Model.getExtensionMechanismsHelper().isStereotype(st, 
+                ProfileMother.STEREOTYPE_NAME_ST, "Class"));
+    }
+    
+    public void testSaveProfileModel() throws Exception {
+        Object model = mother.createSimpleProfileModel();
+        File file = new File(testDir, "testSaveProfileModel.xmi");
+        mother.saveProfileModel(model, file);
+        assertTrue("The file to where the file was supposed to be saved " 
+                + "doesn't exist.", file.exists());
+    }
+    
+}

Added: trunk/tests/org/argouml/profile/TestUserDefinedProfile.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/tests/org/argouml/profile/TestUserDefinedProfile.java?view=auto&rev=14029
==============================================================================
--- (empty file)
+++ trunk/tests/org/argouml/profile/TestUserDefinedProfile.java	2008-01-07 16:20:26-0800
@@ -0,0 +1,73 @@
+// $Id$
+// Copyright (c) 2007 The Regents of the University of California. All
+// Rights Reserved. Permission to use, copy, modify, and distribute this
+// software and its documentation without fee, and without a written
+// agreement is hereby granted, provided that the above copyright notice
+// and this paragraph appear in all copies. This software program and
+// documentation are copyrighted by The Regents of the University of
+// California. The software program and documentation are supplied "AS
+// IS", without any accompanying services from The Regents. The Regents
+// does not warrant that the operation of the program will be
+// uninterrupted or error-free. The end-user understands that the program
+// was developed for research purposes and is advised not to rely
+// exclusively on the program for any reason. IN NO EVENT SHALL THE
+// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
+// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
+// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
+// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
+// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
+// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
+// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
+// UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
+package org.argouml.profile;
+
+import java.io.File;
+
+import junit.framework.TestCase;
+
+import org.argouml.FileHelper;
+import org.argouml.model.InitializeModel;
+
+/**
+ * Some basic tests for the {@link UserDefinedProfile} class.
+ * 
+ * @author Luis Sergio Oliveira (euluis)
+ */
+public class TestUserDefinedProfile extends TestCase {
+    
+    private File testDir;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        InitializeModel.initializeDefault();
+        testDir = FileHelper.setUpDir4Test(getClass());
+    }
+    
+    @Override
+    protected void tearDown() throws Exception {
+        FileHelper.deleteDir(testDir);
+        super.tearDown();
+    }
+    
+    /**
+     * Test loading of a very simple profile via its constructor. Check that its
+     * display name contains the file name.
+     * 
+     * @throws Exception if something goes wrong
+     */
+    public void testLoadingConstructor() throws Exception {
+        // create profile model
+        ProfileMother profileMother = new ProfileMother();
+        Object model = profileMother.createSimpleProfileModel();
+        // save the profile into a xmi file
+        File profileFile = new File(testDir, "testLoadingConstructor.xmi");
+        profileMother.saveProfileModel(model, profileFile);
+        Profile profile = new UserDefinedProfile(profileFile);
+        assertTrue(profile.getDisplayName().contains(profileFile.getName()));
+    }
+
+}

Modified: trunk/tests/org/argouml/profile/internal/TestProfileManagerImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/tests/org/argouml/profile/internal/TestProfileManagerImpl.java?view=diff&rev=14029&p1=trunk/tests/org/argouml/profile/internal/TestProfileManagerImpl.java&p2=trunk/tests/org/argouml/profile/internal/TestProfileManagerImpl.java&r1=14028&r2=14029
==============================================================================
--- trunk/tests/org/argouml/profile/internal/TestProfileManagerImpl.java	(original)
+++ trunk/tests/org/argouml/profile/internal/TestProfileManagerImpl.java	2008-01-07 16:20:26-0800
@@ -52,14 +52,14 @@
 
     public void testProfileManagerImpl() {
         List<Profile> registeredProfiles = manager.getRegisteredProfiles();
-        assertEquals(2, registeredProfiles.size());
-        Set<String> profileNameSet = new HashSet<String>();
+        assertTrue(2 <= registeredProfiles.size());
+        Set<String> internalProfileNameSet = new HashSet<String>();
         for (Profile profile : registeredProfiles) {
-            assertTrue(profile.getDisplayName().equals(ProfileUML.NAME) 
-                    || profile.getDisplayName().equals(ProfileJava.NAME));
-            profileNameSet.add(profile.getDisplayName());
+            if (profile.getDisplayName().equals(ProfileUML.NAME) 
+                    || profile.getDisplayName().equals(ProfileJava.NAME))
+                internalProfileNameSet.add(profile.getDisplayName());
         }
-        assertEquals(2, profileNameSet.size());
+        assertEquals(2, internalProfileNameSet.size());
     }
     
     public void testRemoveProfileThatIsntDefault() {
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.