You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(57) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(44) |
Feb
(151) |
Mar
(131) |
Apr
(171) |
May
(125) |
Jun
(43) |
Jul
(26) |
Aug
(19) |
Sep
(10) |
Oct
|
Nov
(4) |
Dec
(28) |
| 2004 |
Jan
(134) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: <de...@us...> - 2004-01-16 01:22:09
|
Update of /cvsroot/pymerase/pymerase/tests
In directory sc8-pr-cvs1:/tmp/cvs-serv7382
Modified Files:
TestSchool.py
Log Message:
Add tests for new-style attribute access
Index: TestSchool.py
===================================================================
RCS file: /cvsroot/pymerase/pymerase/tests/TestSchool.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** TestSchool.py 18 Dec 2003 00:11:28 -0000 1.11
--- TestSchool.py 16 Jan 2004 01:22:06 -0000 1.12
***************
*** 435,440 ****
finally:
s.close()
-
def testOneToOneUpdate(self):
"""Make sure that set replaces not appends with a one to one links
--- 435,467 ----
finally:
s.close()
+ def testNewAttributeAccess(self):
+ """test new-style python attribute access
+ implementation by Luis Rodrigo Gallardo Cruz
+ """
+ import school
+ school.moduleReload()
+ s = schoo.DBSession(host, datbase)
+
+ try:
+ guiseppe = s.Staff()
+ guiseppe.Uid = "0014"
+ guiseppe.GivenName = "Guiseppe"
+ guiseppe.FamilyName = "Gallard"
+ guiseppe.JobDescription = "accountant"
+ guiseppe.commit()
+
+ givenNameQuery = "%s = 'Guiseppe'" % (givenNameFieldName)
+ guiseppe_list = s.getObjectsWhere(s.Staff, givenNameQuery)
+ self.failUnless(len(guiseppe_list) == 1)
+ guiseppe_saved = guiseppe_list[0]
+
+ self.failUnless(guiseppe.Uid == guiseppe_saved.getGivenName())
+ self.failUnless(guiseppe.GivenName == guiseppe_saved.getGivenName())
+ self.failUnless(guiseppe.FamilyName == guiseppe_saved.getFamilyName())
+ self.failUnless(guiseppe.JobDescription == guiseppe_saved.getJobDescription())
+ finally:
+ s.close()
+
def testOneToOneUpdate(self):
"""Make sure that set replaces not appends with a one to one links
***************
*** 602,605 ****
--- 629,633 ----
suite.addTest(CreateSchoolTestCases("testReadManyToManyLink"))
suite.addTest(CreateSchoolTestCases("testOneToOneInsert"))
+ suite.addTest(CreateSchoolTestCases("testNewAttributeAccess"))
suite.addTest(CreateSchoolTestCases("testOneToOneUpdate"))
suite.addTest(CreateSchoolTestCases("testManyToOneInsert"))
|
|
From: <de...@us...> - 2004-01-16 00:51:34
|
Update of /cvsroot/pymerase/pymerase/pymerase/output
In directory sc8-pr-cvs1:/tmp/cvs-serv2385
Modified Files:
CreateJava.py
Log Message:
more progress at converting squashed sigmoid velocity templates
Index: CreateJava.py
===================================================================
RCS file: /cvsroot/pymerase/pymerase/pymerase/output/CreateJava.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** CreateJava.py 18 Dec 2003 00:32:03 -0000 1.1
--- CreateJava.py 16 Jan 2004 00:51:30 -0000 1.2
***************
*** 90,97 ****
class JavaTemplate(Template):
! def __init__(self):
Template.__init__(self)
#######################################
# Output Translater Interface
--- 90,134 ----
class JavaTemplate(Template):
! def __init__(self, classMetaInfo, TranslatorName):
Template.__init__(self)
+ self.classMetaInfo = classMetaInfo
+ self.TranslatorName = TranslatorName
+ def ClassName(self):
+ return self.classMetaInfo.getName(self.TranslatorName)
+
+ def ExtendsClause(self):
+ if not self.classMetaInfo.isRootClass():
+ baseClasses = self.classMetaInfo.getBaseClassNames(self.TranslatorName)
+ return "extends " + string.join(baseClasses, ", ")
+ else:
+ return ""
+
+ def writeDebugPrint(self, indent):
+ c =[]
+ c +=['/**']
+ c +=[' * Prints a string represenation of this class to aid in debugging']
+ c +=[' */']
+ c +=['public void debugPrint()']
+ c +=['{']
+ c +=[' System.out.println("class %(ClassName())s");' % (self)]
+ c +=[' debugDumpAttributes();']
+ c +=[' System.out.println();']
+ c +=['}']
+ c +=['']
+ c +=['']
+ c +=['protected void debugDumpAttributes()']
+ c +=['{']
+ if not self.classMetaInfo.isRootClass():
+ c +=[' super.debugDumpAttributes();']
+ else:
+ c +=[' System.out.println(" _id: " + _id);']
+ for attribute in self.classMetaInfo.getAttributes():
+ name = attribute.getName(self.TranslatorName)
+ c +=[' System.out.println(" '+name+': " +'+ name + ');']
+ c += ['}']
+ return string.join(addIndentToStrings(indent, c), os.linesep)
+
#######################################
# Output Translater Interface
***************
*** 100,142 ****
"""
c = []
! c += ["/** "]
! c += [" * Create a new %(ClassName)s"]
! c += [" *"]
! c += [" * All collections will be initialized (as empty)."]
! c += [" */"]
! c += [""]
! c += ["public %(ClassName)s()"]
! c += ["{"]
! if not classMetaInfo.isBaseClass():
! c += [" super();"]
! c += [""]
! c += ["%(ClasInitializer)s"]
! c += [""]
! c += ["/**"]
! c += [" * Create a new %(ClassName)s with all fields initialized."]
! c += [" */"]
! c += ["%(DefaultConstructor)s"]
! c += [""]
! c += ["/**"]
! c += [" * Prints a string represenation of this class to aid in deubbing"]
! c += [" */"]
! c += ["public void debugPrint()"]
! c += ["{"]
! c += [" System.out.println(class %(ClassName)s)"]
! c += [" debugDumpAttributes();"]
! c += [" System.out.println();"]
! c += ["}"]
! c += [""]
! c += ["protected void de"]
! c += [""]
! c += [""]
! c += [""]
! c += [""]
! c += [""]
! c += [""]
! c += [""]
! c += [""]
! c += [""]
! c += [""]
--- 137,204 ----
"""
c = []
! c += ['/** ']
! c += [' * Create a new %(ClassName())s']
! c += [' *']
! c += [' * All collections will be initialized (as empty).']
! c += [' */']
! c += ['']
! c += ['public %(ClassName())s %(ExtendsClause())s']
! c += ['{']
! c += [' #writeNoArgCtor']
! if len(classMetaInfo.getAttributes()) > 0:
! c += [' #writeArgCtor']
! c +=['']
! c +=[' /**']
! c +=[' * Getter / Setter Pairs']
! c +=[' */']
! c +=['']
! c +=['']
! c +=[' /**']
! c +=[' * Collection adder/removers']
! c +=[' */']
! c +=['']
! c +=['']
! c +=[' /**']
! c +=[' * Debugging']
! c +=[' */']
! c +=['%(writeDebugPrint(2))s']
! c +=['']
! c +=[' /**']
! c +=[' * Attributes']
! c +=[' */ ']
! #for attribute in classMetaInfo.getAttributes():
! # c += [' %()']
! c +=['']
! c +=[' /**']
! c +=[' * Extra attributes to hold the primary key of the different object']
! c +=[' * references.']
! c +=[' */']
! c +=['']
! c +=['']
! c +=[' /**']
! c +=[' * Extra Object Relational Bridge (OJB) attributes for mapping back']
! c +=[' * to classses which have a 1:N relation with this specific class.']
! c +=[' */']
! c +=['']
! c +=['']
! c +=[' /**']
! c +=[' * Primary Key in database']
! c +=[' */ ']
! #c +=[' protected int _id;']
! c +=['};']
!
! template_engine = JavaTemplate(classMetaInfo, None)
!
! template = string.join(c, os.linesep)
! destination_filename = os.path.join(destination,
! template_engine.ClassName()+".java")
! template_engine.writeFile(template, destination_filename)
! return
!
! c += ['/**']
! c += [' * Create a new %(ClassName)s with all fields initialized.']
! c += [' */']
! c += ['%(DefaultConstructor)s']
! c += ['']
***************
*** 147,158 ****
os.mkdir(destination)
elif not os.path.isdir(destination):
! msg = "PATH(%s) is not a directory!" % (destination)
raise ValueError(msg)
package_information = []
! for t in tables:
try:
! package_information.append(writeClass(destination, t))
except NotImplementedError, e:
! warn("Skipping %s" % ( t.getName() ), DebugWarning)
--- 209,220 ----
os.mkdir(destination)
elif not os.path.isdir(destination):
! msg = 'PATH(%s) is not a directory!' % (destination)
raise ValueError(msg)
package_information = []
! for class_info in parsedInput:
try:
! package_information.append(writeClass(destination, class_info))
except NotImplementedError, e:
! warn('Skipping %s' % ( t.getName() ), DebugWarning)
|
|
From: <de...@us...> - 2004-01-16 00:50:05
|
Update of /cvsroot/pymerase/pymerase/pymerase
In directory sc8-pr-cvs1:/tmp/cvs-serv2166
Modified Files:
ClassMembers.py
Log Message:
Add support for tracking Public/Private/Protected attributes
Index: ClassMembers.py
===================================================================
RCS file: /cvsroot/pymerase/pymerase/pymerase/ClassMembers.py,v
retrieving revision 1.28
retrieving revision 1.29
diff -C2 -d -r1.28 -r1.29
*** ClassMembers.py 10 Sep 2003 02:07:13 -0000 1.28
--- ClassMembers.py 16 Jan 2004 00:50:02 -0000 1.29
***************
*** 210,213 ****
--- 210,217 ----
return self.config.getNameMangler(translatorName).createAppender(self.name)
+ ATTRIBUTE_PUBLIC = 0
+ ATTRIBUTE_PROTECTED = 1
+ ATTRIBUTE_PRIVATE = 2
+
class ClassAttribute(ModelElement):
"""Stores information about an attribute from the xml definition file
***************
*** 221,224 ****
--- 225,229 ----
self.__primaryKey = 0
self.__foreignKey = 0
+ self.__access = ATTRIBUTE_PUBLIC
self.__indexed = 0
***************
*** 281,284 ****
--- 286,321 ----
return (self.__primaryKey or self.__foreignKey)
+ def setPublicAccess(self):
+ """Indicate attribute has public access
+ """
+ self.__access = ATTRIBUTE_PUBLIC
+
+ def isPublicAccess(self):
+ """Does attribute has public access
+ """
+ return self.__access == ATTRIBUTE_PUBLIC
+
+ def setProtectedAccess(self):
+ """Indicate attribute has protected access
+ """
+ self.__access = ATTRIBUTE_PROTECTED
+
+ def isProtectedAccess(self):
+ """Does attribute has protected access
+ """
+ return self.__access == ATTRIBUTE_PROTECTED
+
+ def setPrivateAccess(self):
+ """Indicate attribute has private access
+ """
+ self.__access = ATTRIBUTE_PRIVATE
+
+ def isPrivateAccess(self):
+ """Does attribute has private access
+ """
+ return self.__access == ATTRIBUTE_PRIVATE
+ # end class attribute
+
+
def createAssociation(pymeraseConfig, thisEnd, otherEnd, associationName=None, associationUUID=None):
"""Helper function to create association with provided associationEnds
***************
*** 315,318 ****
--- 352,356 ----
return association
+
class Association(ModelElement):
"""Describe the meta info regarding the between two objects
***************
*** 366,370 ****
firstEndName,
secondEndName)
!
class AssociationEnd(ModelElement):
"""Maintain meta information each end of an association.
--- 404,408 ----
firstEndName,
secondEndName)
!
class AssociationEnd(ModelElement):
"""Maintain meta information each end of an association.
***************
*** 389,392 ****
--- 427,431 ----
self.__multiplicity = None
self.__aggregation = 0
+ self.__access = ATTRIBUTE_PUBLIC
# things to make ER easier
|
|
From: <de...@us...> - 2004-01-16 00:49:19
|
Update of /cvsroot/pymerase/pymerase/tests/pymerase
In directory sc8-pr-cvs1:/tmp/cvs-serv2014
Modified Files:
TestClassMembers.py
Log Message:
added tests for isPublic/Private/Protected. Fixed some invalid tests
Index: TestClassMembers.py
===================================================================
RCS file: /cvsroot/pymerase/pymerase/tests/pymerase/TestClassMembers.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** TestClassMembers.py 10 Sep 2003 02:05:30 -0000 1.2
--- TestClassMembers.py 16 Jan 2004 00:49:16 -0000 1.3
***************
*** 17,21 ****
#from pymerase.util import NameMangling
!
class ClassMemberTestCases(unittest.TestCase):
--- 17,21 ----
#from pymerase.util import NameMangling
! TRANSLATOR=None
class ClassMemberTestCases(unittest.TestCase):
***************
*** 33,37 ****
# can we be named
me = ClassMembers.ModelElement(self.config, "testModelElement")
! self.failUnless(me.getName(None) == "testModelElement")
# does the friendly name default properly?
--- 33,37 ----
# can we be named
me = ClassMembers.ModelElement(self.config, "testModelElement")
! self.failUnless(me.getName(TRANSLATOR) == "testModelElement")
# does the friendly name default properly?
***************
*** 71,77 ****
# test naming utilities
! self.failUnless(me.getGetterName(None) == 'gettestModelElement')
! self.failUnless(me.getSetterName(None) == 'settestModelElement')
! self.failUnless(me.getAppenderName(None) == 'appendtestModelElement')
--- 71,77 ----
# test naming utilities
! self.failUnless(me.getGetterName(TRANSLATOR) == 'gettestModelElement')
! self.failUnless(me.getSetterName(TRANSLATOR) == 'settestModelElement')
! self.failUnless(me.getAppenderName(TRANSLATOR) == 'appendtestModelElement')
***************
*** 130,133 ****
--- 130,145 ----
self.fail("a key cannot be both a primary and foreign key")
+ # test accessors
+ # default is public access
+ self.failUnless(ca.isPublicAccess() and not ca.isProtectedAccess() and not ca.isPrivateAccess(), "default is public")
+ ca.setProtectedAccess()
+ self.failUnless(not ca.isPublicAccess() and ca.isProtectedAccess() and not ca.isPrivateAccess(), "should've been protected")
+ ca.setPrivateAccess()
+ self.failUnless(not ca.isPublicAccess() and not ca.isProtectedAccess() and ca.isPrivateAccess(), "should've been private")
+ ca.setPublicAccess()
+ self.failUnless(ca.isPublicAccess() and not ca.isProtectedAccess() and not ca.isPrivateAccess(), "should've been public")
+
+
+
def testAssociationEnd(self):
"""Test parts of an AssociationEnd that doesn't depend on being in an Association
***************
*** 136,145 ****
ae.setAttributeName('attribute')
! self.failUnless(ae.getAttributeName(None) == 'attribute')
cmi = ClassMembers.ClassMetaInfo(self.config, 'ClassMetaInfo')
ae.setType(cmi)
self.failUnless(ae.getType() == cmi)
! self.failUnless(ae.getClassName(None) == 'ClassMetaInfo')
self.failUnless(ae.getMultiplicity() is None)
--- 148,157 ----
ae.setAttributeName('attribute')
! self.failUnless(ae.getAttributeName(TRANSLATOR) == 'attribute')
cmi = ClassMembers.ClassMetaInfo(self.config, 'ClassMetaInfo')
ae.setType(cmi)
self.failUnless(ae.getType() == cmi)
! self.failUnless(ae.getClassName(TRANSLATOR) == 'ClassMetaInfo')
self.failUnless(ae.getMultiplicity() is None)
***************
*** 151,157 ****
self.failUnless(ae.isNavigable())
! self.failUnless(ae.getGetterName(None) == 'gettestAssociationEnd')
! self.failUnless(ae.getSetterName(None) == 'settestAssociationEnd')
! self.failUnless(ae.getAppenderName(None) == 'appendtestAssociationEnd')
--- 163,169 ----
self.failUnless(ae.isNavigable())
! self.failUnless(ae.getGetterName(TRANSLATOR) == 'gettestAssociationEnd')
! self.failUnless(ae.getSetterName(TRANSLATOR) == 'settestAssociationEnd')
! self.failUnless(ae.getAppenderName(TRANSLATOR) == 'appendtestAssociationEnd')
***************
*** 171,175 ****
A = ClassMembers.createAssociation(self.config, leftAE, rightAE, "ends")
! self.failUnless(A.getName(None) == "ends")
self.failUnless(len(A) == 2)
self.failUnless(leftAE.getAssociation() == A)
--- 183,187 ----
A = ClassMembers.createAssociation(self.config, leftAE, rightAE, "ends")
! self.failUnless(A.getName(TRANSLATOR) == "ends")
self.failUnless(len(A) == 2)
self.failUnless(leftAE.getAssociation() == A)
***************
*** 188,192 ****
A = ClassMembers.createAssociation(self.config, leftAE, rightAE)
! self.failUnless(A.getName(None) == 'leftAssociationEndrightAssociationEnd')
def testClassMetaInfo(self):
--- 200,204 ----
A = ClassMembers.createAssociation(self.config, leftAE, rightAE)
! self.failUnless(A.getName(TRANSLATOR) == 'leftAssociationEndrightAssociationEnd')
def testClassMetaInfo(self):
***************
*** 199,210 ****
cmi = ClassMembers.ClassMetaInfo(self.config, "testClassMetaInfo")
! testFilename = "/a/b/c/d"
! cmi.setFilename(testFilename)
self.failUnless(cmi.getFilename() == testFilename, "%s was not %s" % (cmi.getFilename(), testFilename) )
! self.failUnless(not cmi.getAbstract())
cmi.setAbstract(1)
! self.failUnless(cmi.getAbstract())
# FIXME: test adding an association end?
--- 211,223 ----
cmi = ClassMembers.ClassMetaInfo(self.config, "testClassMetaInfo")
! testPathname = "/a/b/c/d"
! testPath, testFilename = os.path.split(testPathname)
! cmi.setFilename(testPathname)
self.failUnless(cmi.getFilename() == testFilename, "%s was not %s" % (cmi.getFilename(), testFilename) )
! self.failUnless(not cmi.isAbstract())
cmi.setAbstract(1)
! self.failUnless(cmi.isAbstract())
# FIXME: test adding an association end?
***************
*** 213,232 ****
attrib2 = ClassMembers.ClassAttribute(self.config, 'attrib2')
! self.failUnless(len(cmi.getAttributes() == 0))
cmi.addAttribute(attrib1)
cmi.addAttribute(attrib2)
! self.failUnless(len(cmi.getAttributes() == 2))
! self.failUnless(cmi.getAttributeByName('attrib1') == attrib1)
! self.failUnless(len(cmi.getAttributeNames()) == 2)
! self.failUnless('attrib1' in cmi.getAttributeNames())
cmi.appendBaseClass(root1)
cmi.appendBaseClass(root2)
self.failUnless(root1 in cmi.getBaseClasses())
! self.failUnless('root1' in cmi.getBaseClassNames(None))
self.failUnless(root2 in cmi.getBaseClasses())
! self.failUnless('root2' in cmi.getBaseClassNames(None))
self.failUnless(len(cmi.getBaseClasses()) == 2)
! self.failUnless(len(cmi.getBaseClassNames()) == 2)
self.failUnless(not cmi.isRootClass())
--- 226,245 ----
attrib2 = ClassMembers.ClassAttribute(self.config, 'attrib2')
! self.failUnless(len(cmi.getAttributes()) == 0)
cmi.addAttribute(attrib1)
cmi.addAttribute(attrib2)
! self.failUnless(len(cmi.getAttributes()) == 2)
! self.failUnless(cmi.getAttributeByName('attrib1', TRANSLATOR) == attrib1)
! self.failUnless(len(cmi.getAttributeNames(TRANSLATOR)) == 2)
! self.failUnless('attrib1' in cmi.getAttributeNames(TRANSLATOR))
cmi.appendBaseClass(root1)
cmi.appendBaseClass(root2)
self.failUnless(root1 in cmi.getBaseClasses())
! self.failUnless('root1' in cmi.getBaseClassNames(TRANSLATOR))
self.failUnless(root2 in cmi.getBaseClasses())
! self.failUnless('root2' in cmi.getBaseClassNames(TRANSLATOR))
self.failUnless(len(cmi.getBaseClasses()) == 2)
! self.failUnless(len(cmi.getBaseClassNames(TRANSLATOR)) == 2)
self.failUnless(not cmi.isRootClass())
***************
*** 235,240 ****
self.failUnless(cmi.getRootClass() == root1)
! self.failUnless(cmi.getBasePrimaryKeyName(None) == 'root1Attrib_pk')
! self.failUnless(smi.getForeignKeyName(None) == 'testClassMetaInfo_fk')
def suite():
--- 248,253 ----
self.failUnless(cmi.getRootClass() == root1)
! self.failUnless(cmi.getBasePrimaryKeyName(TRANSLATOR) == 'root1_pk')
! self.failUnless(cmi.getForeignKeyName(TRANSLATOR) == 'testClassMetaInfo_fk')
def suite():
|
|
From: <de...@us...> - 2004-01-07 02:00:54
|
Update of /cvsroot/pymerase/smw/smw/scw/UndoRedo/unittests
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/scw/UndoRedo/unittests
Added Files:
__init__.py testLayerManager.py testSfiManager.py
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: __init__.py ---
__all__ = ['testSfiManager', 'testLayerManager']
from testSfiManager import *
from testLayerManager import *
--- NEW FILE: testLayerManager.py ---
#!/usr/bin/env python2
__layer__ = 'UndoRedo'
import unittest
from smw.metamodel import UML14 as metamodel
from smw.metamodel.UML14 import *
from smw.scw.UndoRedo.LayerManager import LayerManager
from smw.scw.UndoRedo.SfiManager import SfiManager
from smw.scw.Correctness.unittests.testLayerManager import testLayerManager as CorrectnessTestLayerManager
class testLayerManager(CorrectnessTestLayerManager):
def setUp(self):
self.lMan = LayerManager()
self.model = Model()
if __name__ == '__main__':
# obj2test = SfiManager()
# suite = unittest.TestLoader().loadTestsFromTestCase(testLayerManager)
# unittest.TextTestRunner().run(suite)
unittest.main()
--- NEW FILE: testSfiManager.py ---
#!/usr/bin/env python2
__layer__ = 'UndoRedo'
import unittest
from smw.metamodel import UML14 as metamodel
#from LayerManager import LayerManager
from smw.scw.UndoRedo.SfiManager import SfiManager
from smw.scw.Correctness.unittests.testSfiManager import testSfiManager as CorrectnessTestSfiManager
class testSfiManager(CorrectnessTestSfiManager):
# class testSfiManager(unittest.TestCase):
def setUp(self):
self.sMan=obj2test
#Testing undo and redo functions, separate test for each undoable/redoable method
def testUndoRedoNewClass(self):
self.sMan.setUp()
self.sMan.project().history.clear()
project=self.sMan.newProject()
self.assert_(project,"project was not created")
class1=self.sMan.newClass()
self.assert_(class1,"class1 was not created")
dep=self.sMan.layerManager().getTestDependency(class1)
self.assert_(dep,"test dependency was not found")
#dep=class1.supplierDependency[0]
#testClass1=dep.client[0]
testClass1=self.sMan.layerManager().getTestClient(class1)
self.assert_(testClass1,"test class was not found")
self.sMan.undo()#should undo newClass()
self.assert_(self.sMan.layerManager().returnElements(project).count(class1)==0,"The class should not be in the project")
self.assert_(self.sMan.layerManager().returnElements(project).count(dep)==0,"The dependency should not be in the project")
self.assert_(self.sMan.layerManager().returnElements(project).count(testClass1)==0,"The dependency should not be in the project")
self.assertEqual(self.sMan.currentElement(),project, "wrong currentElement after undo ")
self.sMan.redo()
self.assert_(self.sMan.layerManager().returnElements(project).count(class1)==1,"The class should not be in the project")
self.assert_(self.sMan.layerManager().returnElements(project).count(dep)==1,"The dependency should not be in the project")
self.assert_(self.sMan.layerManager().returnElements(project).count(testClass1)==1,"The dependency should not be in the project")
self.assertEqual(self.sMan.currentElement(),project, "wrong currentElement after undo ")
self.sMan.focusOnElement(project)
countBefore=len(self.sMan.layerManager().returnElements(project))
for x in range(10):
self.sMan.newClass()
self.sMan.focusOnElement(project)
countAfter=len(self.sMan.layerManager().returnElements(project))
for x in range(10):
self.sMan.undo()
self.assertEqual(len(self.sMan.layerManager().returnElements(project)),countBefore, "failed to undo creating new classes")
for x in range(10):
self.sMan.redo()
self.assertEqual(len(self.sMan.layerManager().returnElements(project)),countAfter, "failed to undo creating new classes")
def testUndoRedoNewInterface(self):
self.sMan.setUp()
self.sMan.project().history.clear()
project=self.sMan.newProject()
interface1=self.sMan.newInterface()
self.sMan.undo()
self.assert_(self.sMan.layerManager().returnElements(project).count(interface1)==0,"The interface should not be in the project")
self.assertEqual(self.sMan.currentElement(),project, "wrong currentElement after undo ")
self.sMan.redo()
self.assert_(self.sMan.layerManager().returnElements(project).count(interface1)==1,"The interface should not be in the project")
self.assertEqual(self.sMan.currentElement(),project, "wrong currentElement after undo ")
countBefore=len(self.sMan.layerManager().returnElements(project))
for x in range(10):
self.sMan.newInterface()
self.sMan.focusOnElement(project)
countAfter=len(self.sMan.layerManager().returnElements(project))
for x in range(10):
self.sMan.undo()
self.assertEqual(len(self.sMan.layerManager().returnElements(project)),countBefore, "failed to undo creating new interfaces")
for x in range(10):
self.sMan.redo()
self.assertEqual(len(self.sMan.layerManager().returnElements(project)),countAfter, "failed to undo creating new interfaces")
def testUndoRedoNewGeneralization(self):
self.sMan.setUp()
self.sMan.project().history.clear()
project = self.sMan.newProject()
class1 = self.sMan.newClass()
self.sMan.focusOnElement(project)
interface1 = self.sMan.newInterface()
gen1=self.sMan.newGeneralization(class1, interface1, "gen1")
self.sMan.undo()
self.assert_(self.sMan.layerManager().returnElements(project).count(gen1) == 0, " Failed to undo creating generalization.")
self.assert_(self.sMan.currentElement() == project, " Failed: wrong currentElement.")
self.sMan.redo()
self.assert_(self.sMan.layerManager().returnElements(project).count(gen1) == 1, " Failed to redo creating generalization..")
self.assert_(self.sMan.currentElement() == project, " Failed: wrong currentElement.(2)")
self.sMan.setUp()
self.sMan.project().history.clear()
project = self.sMan.newProject()
interfaces = []
classes = []
for x in range(10):
interfaces.append(self.sMan.newInterface())
self.sMan.focusOnElement(project)
classes.append(self.sMan.newClass())
self.sMan.focusOnElement(project)
startingCount = len(self.sMan.layerManager().returnElements(project))
for x in range(10):
self.sMan.newGeneralization(interfaces[x], classes[x])
afterCount =len(self.sMan.layerManager().returnElements(project))
for x in range(10):
self.sMan.undo()
self.assert_(startingCount == len(self.sMan.layerManager().returnElements(project)), "Failed in undoiing multiple generalization instances.")
for x in range(10):
self.sMan.redo()
self.assert_(afterCount == len(self.sMan.layerManager().returnElements(project)), "Failed in redoiing multiple generalization instances.")
def testUndoRedoNewAssociation(self):
self.sMan.setUp()
self.sMan.project().history.clear()
project = self.sMan.newProject()
class1 = self.sMan.newClass()
self.sMan.focusOnElement(project)
interface1 = self.sMan.newInterface()
ass1=self.sMan.newAssociation(class1, interface1, "ass1")
self.sMan.undo()
self.assert_(self.sMan.layerManager().returnElements(project).count(ass1) == 0, " Failed to undo creating association.")
self.assert_(self.sMan.currentElement() == project, " Failed: wrong currentElement.")
self.sMan.redo()
self.assert_(self.sMan.layerManager().returnElements(project).count(ass1) == 1, " Failed to redo creating association.")
self.assert_(self.sMan.currentElement() == project, " Failed: wrong currentElement.(2)")
self.sMan.setUp()
self.sMan.project().history.clear()
project = self.sMan.newProject()
interfaces = []
classes = []
for x in range(10):
interfaces.append(self.sMan.newInterface())
self.sMan.focusOnElement(project)
classes.append(self.sMan.newClass())
self.sMan.focusOnElement(project)
startingCount = len(self.sMan.layerManager().returnElements(project))
for x in range(10):
self.sMan.newAssociation(interfaces[x], classes[x])
afterCount =len(self.sMan.layerManager().returnElements(project))
for x in range(10):
self.sMan.undo()
self.assert_(startingCount == len(self.sMan.layerManager().returnElements(project)), "Failed in undoiing multiple association instances.")
for x in range(10):
self.sMan.redo()
self.assert_(afterCount == len(self.sMan.layerManager().returnElements(project)), "Failed in redoiing multiple association instances.")
def testUndoRedoNewDependency(self):
self.sMan.setUp()
self.sMan.project().history.clear()
project = self.sMan.newProject()
pack1 = self.sMan.newPackage()
attr1 = self.sMan.newOperation()
self.sMan.focusOnElement(project)
interface1 = self.sMan.newInterface()
dep1=self.sMan.newDependency(attr1, interface1, "dep1")
self.sMan.undo()
self.assert_(self.sMan.layerManager().returnElements(project).count(dep1) == 0, " Failed to undo creating dependency.")
self.assert_(self.sMan.currentElement() == project, " Failed: wrong currentElement.")
self.sMan.redo()
self.assert_(self.sMan.layerManager().returnElements(project).count(dep1) == 1, " Failed to redo creating dependency.")
self.assert_(self.sMan.currentElement() == project, " Failed: wrong currentElement.(2)")
self.sMan.setUp()
self.sMan.project().history.clear()
project = self.sMan.newProject()
interfaces = []
classes = []
for x in range(10):
interfaces.append(self.sMan.newInterface())
self.sMan.focusOnElement(project)
classes.append(self.sMan.newClass())
self.sMan.focusOnElement(project)
startingCount = len(self.sMan.layerManager().returnElements(project))
for x in range(10):
self.sMan.newDependency(interfaces[x], classes[x])
afterCount =len(self.sMan.layerManager().returnElements(project))
for x in range(10):
self.sMan.undo()
self.assert_(startingCount == len(self.sMan.layerManager().returnElements(project)), "Failed in undoing multiple dependencies")
for x in range(10):
self.sMan.redo()
self.assert_(afterCount == len(self.sMan.layerManager().returnElements(project)), "Failed in redoing multiple dependencies.")
def testUndoRedoNewPackage(self):
self.sMan.setUp()
project1=self.sMan.newProject("myproject")
pack1=self.sMan.newPackage("pack1")
self.assert_(self.sMan.layerManager().returnElements(project1).count(pack1)==1, "Package should be added to the project")
self.sMan.undo()
self.assert_(self.sMan.currentElement()==project1, "Current element should be the myproject after undo.")
self.assert_(self.sMan.layerManager().returnElements(project1).count(pack1)==0, "Package should not be in the project")
self.sMan.redo()
# self.assert_(self.sMan.currentElement==pack1, "Current element should be package after redo")
self.assert_(self.sMan.layerManager().returnElements(project1).count(pack1)==1,"Package should be in project after redo")
# testing with multiple packet instances.
self.sMan.setUp()
project1=self.sMan.newProject("myproject")
packages = []
for x in range (10):
packages.append(self.sMan.newPackage())
packages.reverse()
for x in packages:
# self.assertEqual(x,self.sMan.currentElement(),"Wrong currentElement in the project")
self.assert_(self.sMan.layerManager().returnElements(project1).count(x)==1,"The project1 was not on the list.")
self.sMan.undo()
self.assert_(self.sMan.layerManager().returnElements(project1).count(x)==0,"The package was not deleted.")
self.assertEqual(project1,self.sMan.currentElement(),"CurrentElement should be the project1")
# testing creating new packages inside each other
elementsBefore=self.sMan.layerManager().returnElements(project1)
for x in range(10):
self.sMan.newPackage()
elementsAfter=self.sMan.layerManager().returnElements(project1)
for x in range(10):
self.sMan.undo()
self.assertEqual(self.sMan.currentElement(),project1,\
"the current element should be project1 after undo")
elementsAfterUndo=self.sMan.layerManager().returnElements(project1)
self.assertEqual(len(elementsAfter)-20,len(elementsBefore), "Count does not match") #-10
self.assertEqual(len(elementsBefore),len(elementsAfterUndo),"count does not match")
#little test for redo
elementsBefore=self.sMan.layerManager().returnElements(project1)
for x in range(10):
self.sMan.redo()
self.assertEqual(len(self.sMan.layerManager().returnElements(project1)),len(elementsAfter),\
"redo does not work")
# testing creating new packages directly to the project
elementsBefore=self.sMan.layerManager().returnElements(project1)
for x in range(10):
self.sMan.newPackage()
self.sMan.focusOnElement(project1)
elementsAfter=self.sMan.layerManager().returnElements(project1)
for x in range(10):
self.sMan.undo()
elementsAfterUndo=self.sMan.layerManager().returnElements(project1)
self.assertEqual(len(elementsAfter)-20,len(elementsBefore), "Count does not match")
self.assertEqual(len(elementsBefore),len(elementsAfterUndo),"count does not match")
# testing with one package and one failure
self.sMan.setUp()
project1=self.sMan.newProject("myproject")
pack1 = self.sMan.newPackage("Packet")
self.sMan.focusOnElement(project1)
pack2 = self.sMan.newPackage("Packet") # should return None
self.sMan.undo()#should undo creating pack1
self.assert_(self.sMan.layerManager().returnElements(project1).count(pack1) == 0,\
"pack1 should not be in the project after undo.")
def testUndoRedoNewMethod(self):
self.sMan.setUp()
self.sMan.project().history.clear()
project=self.sMan.newProject()
class1=self.sMan.newClass()
self.assert_(class1,"class was not created")
testClass1=self.sMan.layerManager().getTestClient(class1)
self.assert_(testClass1,"test class was not found")
#testclass1=class1.supplierDependency[0].client[0]
method1=self.sMan.newMethod()
self.assert_(method1,"method was not created")
testMethod1=None
for x in testClass1.feature:
if isinstance(x,metamodel.Method):
testMethod1=x
self.sMan.undo()
self.assert_(self.sMan.layerManager().returnElements(project).count(method1)==0,"The method1 should not be in the project")
self.assert_(self.sMan.layerManager().returnElements(project).count(testMethod1)==0,"The test method should not be in the project")
self.assertEqual(self.sMan.currentElement(),project, "wrong currentElement after undo ")
self.sMan.redo()
self.assert_(self.sMan.layerManager().returnElements(project).count(method1)==1,"The method1 should be in the project")
self.assert_(self.sMan.layerManager().returnElements(project).count(testMethod1)==1,"The testmethod1 should be in the project")
self.assertEqual(self.sMan.currentElement(),project, "wrong currentElement after undo ")
self.sMan.focusOnElement(project)
class1=self.sMan.newClass()
countBefore=len(self.sMan.layerManager().returnElements(project))
for x in range(10):
self.sMan.newMethod()
self.sMan.focusOnElement(class1)
countAfter=len(self.sMan.layerManager().returnElements(project))
for x in range(10):
self.sMan.undo()
#print countAfter
self.assertEqual(len(self.sMan.layerManager().returnElements(project)),countBefore, "failed to undo creating new methods")
for x in range(10):
self.sMan.redo()
self.assertEqual(len(self.sMan.layerManager().returnElements(project)),countAfter, "failed to undo creating new methods")
def testUndoRedoNewAttribute(self):
self.sMan.setUp()
self.sMan.project().history.clear()
project=self.sMan.newProject()
class1=self.sMan.newClass()
oper1=self.sMan.newOperation()
self.sMan.undo()
self.assert_(self.sMan.layerManager().returnElements(project).count(oper1)==0,"The attribute should not be in the project")
self.assertEqual(self.sMan.currentElement(),project, "wrong currentElement after undo ")
self.sMan.redo()
self.assert_(self.sMan.layerManager().returnElements(project).count(oper1)==1,"The attribute should not be in the project")
self.assertEqual(self.sMan.currentElement(),project, "wrong currentElement after undo ")
self.sMan.focusOnElement(project)
interface1=self.sMan.newInterface()
countBefore=len(self.sMan.layerManager().returnElements(project))
for x in range(10):
self.sMan.newAttribute()
self.sMan.focusOnElement(interface1)
countAfter=len(self.sMan.layerManager().returnElements(project))
for x in range(10):
self.sMan.undo()
self.assertEqual(len(self.sMan.layerManager().returnElements(project)),countBefore, "failed to undo creating new attributes")
for x in range(10):
self.sMan.redo()
self.assertEqual(len(self.sMan.layerManager().returnElements(project)),countAfter, "failed to undo creating new attributes")
## def testUndoRedoDeleteElement1(self):
## self.sMan.setUp()
## self.sMan.project().history.clear()
## project=self.sMan.newProject()
## class1 = self.sMan.newClass()
## self.sMan.deleteElement1(class1)
## self.assert_(self.sMan.layerManager().returnElements(project).count(class1) == 0, "Delete Element did not work.")
## self.sMan.undo()
## self.assert_(self.sMan.layerManager().returnElements(project).count(class1) == 1, "Undoing delete did not work.")
## self.sMan.redo()
## self.assert_(self.sMan.layerManager().returnElements(project).count(class1) == 0, "redoing Delete Element did not work.")
## pack1 = self.sMan.newPackage()
## class1 = self.sMan.newClass()
## dep1 = class1.supplierDependency[0]
## testclass1 = dep1.client[0]
## self.sMan.deleteElement1(pack1)
## self.assert_(self.sMan.layerManager().returnElements(project).count(pack1) == 0, "Delete Element did not work(1).")
## self.assert_(self.sMan.layerManager().returnElements(project).count(class1) == 0, "Delete Element did not work)(2).")
## self.assert_(self.sMan.layerManager().returnElements(project).count(dep1) == 0, "Delete Element did not work.(3)")
## self.assert_(self.sMan.layerManager().returnElements(project).count(testclass1) == 0, "Delete Element did not work.(4)")
## self.sMan.undo()
## self.assert_(self.sMan.layerManager().returnElements(project).count(pack1) == 1, "Undoing delete did not work.(1)")
## self.assert_(self.sMan.layerManager().returnElements(project).count(class1) == 1, "Undoing delete did not work.(2)")
## self.assert_(self.sMan.layerManager().returnElements(project).count(dep1) == 1, "Undoing delete did not work.(3)")
## self.assert_(self.sMan.layerManager().returnElements(project).count(testclass1) == 1, "Undoing delete did not work.(4)")
## self.sMan.redo()
## self.assert_(self.sMan.layerManager().returnElements(project).count(pack1) == 0, "redo Delete Element did not work(1).")
## self.assert_(self.sMan.layerManager().returnElements(project).count(class1) == 0, "redo Delete Element did not work)(2).")
## self.assert_(self.sMan.layerManager().returnElements(project).count(dep1) == 0, "redo Delete Element did not work.(3)")
## self.assert_(self.sMan.layerManager().returnElements(project).count(testclass1) == 0, "redo Delete Element did not work.(4)")
## count1 = len(self.sMan.layerManager().returnElements(project))
## interfaces = []
## for x in range(10):
## interfaces.append(self.sMan.newInterface())
## self.sMan.focusOnElement(project)
## count2 = len(self.sMan.layerManager().returnElements(project))
## for x in range(10):
## self.sMan.deleteElement1(interfaces[x])
## count3 = len(self.sMan.layerManager().returnElements(project))
## self.assert_(count3 == count1, "Counts do not match")
## for x in range(10):
## self.sMan.undo()
## self.assert_(len(self.sMan.layerManager().returnElements(project)) == count2, "Undoing delete did not work.(1)")
## for x in range(10):
## self.sMan.redo()
## self.assert_(len(self.sMan.layerManager().returnElements(project)) == count3, "redoing delete did not work.(1)")
def testUndoRedoDeleteElement2(self):
self.sMan.setUp()
self.sMan.project().history.clear()
project=self.sMan.newProject()
class1 = self.sMan.newClass()
testClass=self.sMan.layerManager().getTestClient(class1)
self.sMan.deleteElement2(class1)
self.assert_(self.sMan.layerManager().returnElements(project).count(class1) == 0, "Delete Element did not work.")
self.sMan.undo()
self.assert_(self.sMan.layerManager().returnElements(project).count(class1) == 1, "Undoing delete did not work.")
self.sMan.redo()
self.assert_(self.sMan.layerManager().returnElements(project).count(class1) == 0, "redoing Delete Element did not work.")
pack1 = self.sMan.newPackage()
class1 = self.sMan.newClass()
dep1 = class1.supplierDependency[0]
testclass1 = dep1.client[0]
self.sMan.deleteElement2(pack1)
self.assert_(self.sMan.layerManager().returnElements(project).count(pack1) == 0, "Delete Element did not work(1).")
self.assert_(self.sMan.layerManager().returnElements(project).count(class1) == 0, "Delete Element did not work)(2).")
self.assert_(self.sMan.layerManager().returnElements(project).count(dep1) == 0, "Delete Element did not work.(3)")
self.assert_(self.sMan.layerManager().returnElements(project).count(testclass1) == 0, "Delete Element did not work.(4)")
self.sMan.undo()
self.assert_(self.sMan.layerManager().returnElements(project).count(pack1) == 1, "Undoing delete did not work.(1)")
self.assert_(self.sMan.layerManager().returnElements(project).count(class1) == 1, "Undoing delete did not work.(2)")
self.assert_(self.sMan.layerManager().returnElements(project).count(dep1) == 1, "Undoing delete did not work.(3)")
self.assert_(self.sMan.layerManager().returnElements(project).count(testclass1) == 1, "Undoing delete did not work.(4)")
self.sMan.redo()
self.assert_(self.sMan.layerManager().returnElements(project).count(pack1) == 0, "redo Delete Element did not work(1).")
self.assert_(self.sMan.layerManager().returnElements(project).count(class1) == 0, "redo Delete Element did not work)(2).")
self.assert_(self.sMan.layerManager().returnElements(project).count(dep1) == 0, "redo Delete Element did not work.(3)")
self.assert_(self.sMan.layerManager().returnElements(project).count(testclass1) == 0, "redo Delete Element did not work.(4)")
count1 = len(self.sMan.layerManager().returnElements(project))
interfaces = []
for x in range(10):
interfaces.append(self.sMan.newInterface())
self.sMan.focusOnElement(project)
count2 = len(self.sMan.layerManager().returnElements(project))
for x in range(10):
self.sMan.deleteElement2(interfaces[x])
count3 = len(self.sMan.layerManager().returnElements(project))
self.assert_(count3 == count1, "Counts do not match")
for x in range(10):
self.sMan.undo()
self.assert_(len(self.sMan.layerManager().returnElements(project)) == count2, "Undoing delete did not work.(1)")
for x in range(10):
self.sMan.redo()
self.assert_(len(self.sMan.layerManager().returnElements(project)) == count3, "redoing delete did not work.(1)")
# generalization test
self.sMan.setUp()
self.sMan.project().history.clear()
project=self.sMan.newProject()
class1 = self.sMan.newClass()
self.sMan.focusOnElement(project)
interface1 = self.sMan.newInterface()
gen1 = self.sMan.newGeneralization(interface1, class1)
count1 = len(self.sMan.layerManager().returnElements(project))
self.sMan.deleteElement2(interface1)
self.assert_(self.sMan.layerManager().returnElements(project).count(interface1) == 0, "Delete interface did not work(1).")
self.assert_(self.sMan.layerManager().returnElements(project).count(gen1) == 0, "Delete2 did not work)(2).")
self.sMan.undo()
self.assert_(self.sMan.layerManager().returnElements(project).count(interface1) == 1, "Undoing delete2 did not work.(1)")
self.assert_(self.sMan.layerManager().returnElements(project).count(gen1) == 1, "Undoing delete2 did not work.(2)")
self.sMan.redo()
self.assert_(self.sMan.layerManager().returnElements(project).count(interface1) == 0, "redoing Delete interface did not work(1).")
self.assert_(self.sMan.layerManager().returnElements(project).count(gen1) == 0, "redoing Delete2 did not work)(2).")
def testUndoRedoRenameElement(self):
self.sMan.setUp()
self.sMan.project().history.clear()
project=self.sMan.newProject()
interface1 = self.sMan.newInterface("intface")
t=self.sMan.renameElement(interface1, "newnameintface")
self.sMan.undo()
self.assert_(interface1.name == "intface", "Undoing rename element was not succesfull.")
self.sMan.redo()
self.assert_(interface1.name == "newnameintface", "redoing rename element was not succesfull.")
# testing renaming with class and method
self.sMan.setUp()
self.sMan.project().history.clear()
project=self.sMan.newProject()
class1=self.sMan.newClass("oldclass")
testClass1=self.sMan.layerManager().getTestClient(class1)
method1=self.sMan.newMethod("oldmethod")
for x in testClass1.feature:
if x.oclIsKindOf(metamodel.Method):
testMethod1=x
self.assert_(testClass1.name=="testOldclass","testclass has wrong name")
self.assert_(testMethod1.name=="testOldmethod","testmethod has wrong name")
self.sMan.renameElement(class1,"newclass")
self.sMan.renameElement(method1,"newmethod")
self.assert_(testClass1.name=="testNewclass","testclass has wrong name")
self.assert_(testMethod1.name=="testNewmethod","testmethod has wrong name")
self.sMan.undo()
self.sMan.undo()
self.assert_(testClass1.name=="testOldclass","failed to undo renaming testclass")
self.assert_(testMethod1.name=="testOldmethod","failed to undo renaming testmethod")
self.sMan.redo()
self.sMan.redo()
self.assert_(testClass1.name=="testNewclass","failed to redo renaming testclass")
self.assert_(testMethod1.name=="testNewmethod","failed to redo renaming testclass")
self.sMan.project().history.clear()
def testUndo(self):
#testing calling undo without anything to undo
self.sMan.setUp()
self.sMan.project().history.clear()
history=self.sMan.project().history
self.sMan.undo()
self.assertEqual(history,self.sMan.project().history, "there shouldn't have been anything to undo")
def testRedo(self):
#testing calling redo without anything to redo
self.sMan.setUp()
self.sMan.project().history.clear()
history=self.sMan.project().history
self.sMan.redo()
self.assertEqual(history,self.sMan.project().history,"there shouldn't have been anything to redo.")
if __name__ == '__main__':
#unittest.main()
obj2test = SfiManager()
suite=unittest.TestLoader().loadTestsFromTestCase(testSfiManager)
unittest.TextTestRunner().run(suite)
|
|
From: <de...@us...> - 2004-01-07 02:00:52
|
Update of /cvsroot/pymerase/smw/smw/taco In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/taco Added Files: __init__.py Log Message: Imported version of SMW downloaded on 2003 Apr 14 --- NEW FILE: __init__.py --- """ SMW The System Modeling Workbench Copyright 2001,2002 by Ivan Porres ip...@ab... The System Modeling Workbench is a collection of tools for creating, editing and transforming software models. MODELER We recomend that you start using the SMW Modeler in order to get familiar with SMW. MODELS From the programmer's point of view, each supported modeling language is represented by a metamodel module. A metamodel module contains a Python class for each model element. These classes have the same attributes and associations with the same name as in the metamodel of the modeling language. Since the model elements are represented as Python classes, we can create a model by instantiating new objects and manipulating its associations. METAMODELS SMW provides the following metamodels Language Module UML 1.1 smw.metamodel.UML11 UML 1.3 smw.metamodel.UML13 UML 1.4 smw.metamodel.UML14 You should import the appropiate module, i.e.: from smw.metamodel import UML14 LICENSE This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. """ |
|
From: <de...@us...> - 2004-01-07 02:00:51
|
Update of /cvsroot/pymerase/smw/smw/testdriver
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/testdriver
Added Files:
DiagramEditorTester.py PropertyEditorTester.py __init__.py
pycov.py unittester.py
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: DiagramEditorTester.py ---
import unittest
import sys
from smw.metamodel.MetaMM import *
from smw.modeler import modelerApp
from smw.modeler.DiagramEditor import *
from smw.modeler.UML.UMLCoreEditor import *
import smw.modeler.Gestures
class FakeEvent:
def __init__(self,sX,sY):
self.sX=sX
self.sY=sY
class DiagramEditorTester:
def __init__(self,profile="UML14"):
smw=modelerApp.modelerApp()
smw.main(loop=0,args=["--profile",profile])
self.smw=smw
self.DEM=None
for e in smw.project.editorSet.editors():
if isinstance(e,DiagramEditorManager):
self.DEM=e
assert(self.DEM)
def getMainEditor(self):
self.smw.processEvents()
return self.DEM.subEditors[0]
def getCurrentEditor(self):
self.smw.processEvents()
return self.DEM.getCurrentEditor()
def testActionConnection(self,de,actions):
de.expossed()
for a in actions:
if not de.mainWindow.actions.isConnected(a,de):
raise("Something missing in activateActions: Action "+str(a)+" is not connected to editor "+str(de)+" after an expose event")
de.obscured()
for a in actions:
if de.mainWindow.actions.isConnected(a,de):
raise("Something wrong in obscured: Action "+str(a)+" is still connected to editor "+str(de)+" after an obscyre event")
def testCreateInside(self,de,containerA,others):
de.expossed()
de.selectAll()
de.deleteSelection()
h=de.mainWindow.actions.getHandler(containerA,de)
if not h:
raise "Unknown action",containerA
h()
container=de.currentGesture.onAdd( (300,50) )
for a in others:
h=de.mainWindow.actions.getHandler(a,de)
if not h:
raise "Unknown action",a
h()
o=de.currentGesture.doIt ( FakeEvent(320,60) )
assert(o)
print de.currentGesture
p=self.presentationsOfElement(o,de)[0]
self.smw.processEvents()
assert(container.isPart(o))
de.selectPresentation(p)
de.deleteSelection()
def testActionCombo(self,de,first,second,link,selfLink=1):
de.expossed()
h=de.mainWindow.actions.getHandler(first,de)
if not h:
raise "Unknown action",first
h()
firstE=de.currentGesture.onAdd((50,50))
firstP=self.presentationsOfElement(firstE,de)[0]
thirdE=de.currentGesture.onAdd((200,50))
thirdP=self.presentationsOfElement(thirdE,de)[0]
h=de.mainWindow.actions.getHandler(second,de)
if not h:
raise "Unknown action",second
h()
secondE=de.currentGesture.onAdd((150,150))
secondP=self.presentationsOfElement(secondE,de)[0]
h=de.mainWindow.actions.getHandler(link,de)
h()
linkE=de.currentGesture.onLink(firstP,secondP,[[50,50],[150,150]])
assert(linkE)
linkP=self.presentationsOfElement(linkE,de)[0]
assert(linkP.diagram==de.diagram)
link2E=de.currentGesture.onLink(thirdP,secondP,[[200,50],[150,150]])
assert(linkE)
link2P=self.presentationsOfElement(link2E,de)[0]
assert(link2P.diagram==de.diagram)
self.testCutCopyPaste(de)
self.testActionCombo2(de,firstE,secondE,thirdE,linkE)
#self.testCutCopyPaste(de)
de.selectAll()
de.deleteSelection()
if first==second and selfLink and not isinstance(linkE,Generalization) and not isinstance(linkE,Include) and not isinstance(linkE,Extend)\
and not isinstance(linkE,Stimulus):
h=de.mainWindow.actions.getHandler(first,de)
h()
firstE=de.currentGesture.onAdd((50,50))
firstP=self.presentationsOfElement(firstE,de)[0]
h=de.mainWindow.actions.getHandler(link,de)
h()
linkE=de.currentGesture.onLink(firstP,firstP,[[50,50],[55,55]])
assert(linkE)
linkP=self.presentationsOfElement(linkE,de)[0]
assert(linkP.diagram==de.diagram)
self.testActionCombo2(de,firstE,firstE,thirdE,linkE)
#self.testCutCopyPaste(de)
de.selectAll()
de.deleteSelection()
def testActionCombo2(self,de,firstE,secondE,thirdE,linkE):
self.testMoveCircle(firstE,de)
self.testHideAndDrop(linkE,de)
self.testDelete(linkE,de)
self.testDelete(firstE,de,testHideAfterDelete=0)
if firstE!=secondE:
self.testDelete(secondE,de,testHideAfterDelete=0)
self.testDelete(linkE,de)
self.testHideAndDrop(linkE,de)
self.testHideAndDrop(firstE,de)
self.testRelink(de,linkE,thirdE)
self.testRelink(de,linkE,secondE)
assert(len(self.presentationsOfElement(linkE,de))==0)
self.testDrop(linkE,de)
assert(len(self.presentationsOfElement(linkE,de)))
def testRelink(self,de,linkE,target):
pres,targetP=None,None
for p in linkE.presentation:
if isinstance(p,AbstractLinkView):
pres = p
break
for p in target.presentation:
if isinstance(p,QtPresentationElement) \
and not isinstance(p,TextQtPresentationElement):
targetP=p
if pres and targetP:
if pres.canConnectTo(target,1):
pres.connectTo(target,targetP,1)
def testAddPlaceAction(self,de,a):
h=de.mainWindow.actions.getHandler(a,de)
h()
if not isinstance(de.currentGesture,smw.modeler.Gestures.AddElementG):
raise "action "+str(a)+" does not activate AddElementG"
# create an element
e=de.currentGesture.doIt(FakeEvent(50,50))
if not isinstance(e,MetaMM.Element):
raise str(de.currentGesture.onAdd)+" does not return a model element"
if e.presentation.size()==0:
raise "Element "+str(e)+" does not have presentations!"
name1=e.name
e2=de.currentGesture.onAdd((150,150))
name2=e2.name
if name1==name2:
raise "Each element should have a different name. Action ",a
pe=self.presentationsOfElement(e,de)
if not pe:
raise "Element "+str(e)+" does not a have presentation in the diagram!"
self.testMove(e,de)
self.testHideAndDrop(e,de)
self.testDelete(e,de)
def testDelete(self,e,de,testHideAfterDelete=1):
for z in range(2):
self.smw.processEvents()
print "testDelete pass=",z
p=self.presentationsOfElement(e,de)[0]
de.selection.clear()
de.selectPresentation(p)
de.project.history.beginModifyCmd()
de.deleteSelection()
de.project.history.endModifyCmd()
print p
assert(not p.diagram)
de.project.history.undo()
assert(p.diagram==de.diagram)
de.project.history.redo()
assert(not p.diagram)
de.project.history.undo()
assert(p.diagram==de.diagram)
if testHideAfterDelete:
print "testHideAndDrop after delete and undo"
self.testHideAndDrop(e,de)
self.testMove(e,de)
def presentationsOfElement(self,e,de):
pe=[]
for p in e.presentation:
if p in de.diagram.content:
pe.append(p)
return pe
def testHideAndDrop(self,e,de):
for z in range(2):
pres=self.presentationsOfElement(e,de)
print "test HideAndDrop pass=",z
self.testMove(e,de)
de.selection.clear()
for p in pres:
de.selectPresentation(p)
self.testMove(e,de)
de.hideSelection()
assert(not p.diagram)
assert(p not in e.presentation)
assert(not len(self.presentationsOfElement(e,de)))
de.dropElement(60+100*z,60,e,clone=0,forceDropInDiagram=1)
if not len(self.presentationsOfElement(e,de)):
raise "Editor "+str(de)+" cannot accept drop "+str(e)
def testDrop(self,e,de):
de.dropElement(60,60,e,clone=0,forceDropInDiagram=1)
assert(len(self.presentationsOfElement(e,de)))
def testMove(self,e,de,x=0,y=0):
pass
def testMoveCircle(self,e,de):
y=30
while y<300:
x=30
while x<300:
self.testMove(e,de,x,y)
x=x+30
y=y+30
def testEditor(self,de,placeActions,actionCombos):
print "Testing editor ",de
assert(isinstance(de,DiagramEditor))
# focusOn is a protected
assert("focusOn" not in de.__dict__)
self.testActionConnection(de,placeActions)
de.expossed()
for a in placeActions:
self.testAddPlaceAction(de,a)
de.selectAll()
de.deleteSelection()
for c in actionCombos:
l=c[0]
for first in c[1]:
for second in c[2]:
print "Testing ",first,"-",l,"-",second
self.testActionCombo(de,first,second,l)
def testCutCopyPaste(self,de):
de.selectAll()
de.copy()
de.paste()
de.cut()
de.paste()
def testCreateDiagram(self,de,eAction,dMethod):
de.expossed()
h=de.mainWindow.actions.getHandler(eAction,de)
h()
if not isinstance(de.currentGesture,smw.modeler.Gestures.AddElementG):
raise "action "+str(eAction)+" does not activate AddElementG"
# create an element
e=de.currentGesture.onAdd((250,150))
newElement=dMethod(e)
self.smw.processEvents()
assert(newElement)
secondEditor=None
for p in newElement.presentation:
if isinstance(p,Diagram):
secondEditor=p.editor
assert(secondEditor)
secondEditor.deleteDiagram()
self.smw.undo()
self.smw.redo()
--- NEW FILE: PropertyEditorTester.py ---
from smw.modeler.DialogEditor import *
from smw.smwQtApplication import *
from smw.Project import *
import types
class PEtester(smwQtApplication):
def __init__(self,metamodel):
smwQtApplication.__init__(self)
self.metamodel=metamodel
self.project=Project()
self.project.root=self.metamodel.Model()
self.processEvents()
self.move(0,0)
self.resize(700,500)
def test(self,PEClass,elementsToEdit=[]):
assert(issubclass(PEClass,PropertyEditor))
print "Testing ",PEClass.__name__
self.pe=PEClass(self,self.project)
self.pe.resize(600,400)
self.pe.show()
self.processEvents()
self.pe.focusOn(None)
self.processEvents()
supportedElements=[]
excludes=self.pe.supercedes()
assert(PEClass not in excludes)
for c in self.metamodel.__dict__.values():
if type(c)==types.ClassType and \
issubclass(c,self.metamodel.ModelElement):
e=c()
if self.pe.canEdit(e):
supportedElements.append(c)
print "Supported elements ",supportedElements
if not supportedElements and not elementsToEdit:
print "PropertEditor ",PEClass," cannot edit anything!"
assert(0)
self.project.history.clear()
for c in supportedElements:
e=c()
self.project.history.clear()
self.project.history.beginModifyCmd()
self.pe.focusOn(e)
self.processEvents()
self.pe.apply()
self.project.history.endModifyCmd()
if self.project.history.canUndo():
print "*"*80
print "PropertyEditor ",PEClass,"modifies the model without user interaction."
print "*"*80
#assert(0)
if issubclass(PEClass,ListPropertyEditor):
for c in supportedElements:
e=c()
self.pe.focusOn(e)
self.processEvents()
self.pe.add()
self.pe.add()
self.pe.add()
self.pe.delete([0,1,2])
self.pe.apply()
self.processEvents()
#check if elements really deleted:
assert(not eval("e.%s"%self.pe.getAssociationName()))
for e in elementsToEdit:
assert(self.pe.canEdit(e))
self.pe.focusOn(e)
for i in range(10000):
self.processEvents()
self.pe.apply()
self.processEvents()
--- NEW FILE: __init__.py ---
--- NEW FILE: pycov.py ---
import os
import sys
import getopt
__programname__ = "pycov"
__version__ = "0.1"
__author__ = "Marcus Alanen"
import sys
import types
from profile import Profile
import inspect
import re
import os
import string
import time
import thread
import unittest
__trace_lock__ = None
if __trace_lock__ == None:
__trace_lock__ = thread.allocate_lock()
__debugCT__ = 0
class FileTestCoverage:
def __init__(self, filename, inputfilename = None):
self.filename = filename
if inputfilename:
self.inputfilename = inputfilename
else:
self.inputfilename = filename
self.enabled = 1
self.unused_functions = {}
# map of linenumber to usage count
self.lines_used = {}
lines = self.__getSourceLines__()
if lines == -1:
self.enabled = 0
return
self.max_lines = lines
for i in range(lines+1):
self.lines_used[i] = 0
self.current_function = None
self.current_function_unused = 1
def __fixOldFunc__(self):
if self.current_function and self.current_function_unused:
self.unused_functions[self.current_function] = 1
#print "Function %s is unused!" % self.current_function
self.current_function = None
self.current_function_unused = 1
def __getSource__(self):
"""Returns the source file as an array of lines."""
if not self.enabled:
return
global __debugCT__
if __debugCT__:
print "Getting source for", self.inputfilename
try:
lines = [None] # dummy line is line number 0
f = file(self.inputfilename)
# There must be a faster way, python has already loaded
# the file...
while 1:
t = f.readline()
if not t:
break
lines.append(t)
f.close()
return lines
except:
print "*** Could not load", self.inputfilename
for i in sys.exc_info():
print i
def __getSourceLines__(self):
"""Counts the lines in the source file."""
try:
f = file(self.inputfilename)
lines = 0
# There must be a faster way, python has already loaded
# the file...
while f.readline():
lines += 1
f.close()
global __debugCT__
if __debugCT__:
print self.inputfilename, "has", lines, "lines."
return lines
except:
print "*** Could not load", self.inputfilename
for i in sys.exc_info():
print i
return -1
def cover(self, linenumber, bump = 1):
"""Cover this line of the source file. Basically, just
knock its linenumber reference up one step."""
if not self.enabled:
return
assert(self.lines_used.has_key(linenumber))
self.lines_used[linenumber] += bump
def check(self):
"""Checks the source file line-by-line. This is to
find empty lines and comment lines."""
if not self.enabled:
return
lines = self.__getSource__()
#
#
#
#
current_class = ""
current_class_column = 0
# This keeps empty lines after used regions as used,
# but empty lines after unused regions as unused...
# => Looks neater?
used = 1
# If previous_line_continues
previous_line_continues = 0
for i in range(1, self.max_lines+1):
theline = lines[i]
if self.lines_used[i] > 0:
used = 1
##
## SYNTAX CHECK
## Find classes, functions, exceptions...
##
# MATCH CLASS
m = re.match("^\s*(class)\s+([\w]+)", theline)
if m:
current_class = m.group(2) # BUG nested classes?
current_class_column = m.start(1)
###print "Found class", current_class
continue
# MATCH FUNCTION
m = re.match("^\s*(def)\s+([\w]+)", theline)
if m:
self.__fixOldFunc__()
output = ""
if not current_class or m.start(1) <= current_class_column:
current_class = ""
output += "Nonclass function "
curfunc = m.group(2) # BUG nested functions?
if current_class:
self.current_function = current_class + "." + curfunc
else:
self.current_function = curfunc
if current_class:
output += current_class + "::"
output += curfunc
if self.lines_used[i] == 0:
output += " (unused)"
###################print output
continue
##
## Do we continue from the previous line
##
if previous_line_continues and self.lines_used[i] == 0:
self.lines_used[i] = previous_line_continues
##
## Decide if this line continues on the next line
##
if re.search("[\\\[\{\(,]\s*$", theline):
previous_line_continues = self.lines_used[i]
else:
previous_line_continues = 0
# Skip used lines
if self.lines_used[i] > 0:
self.current_function_unused = 0
continue
##
## EMPTY LINE CHECK
##
# Empty lines and lines with comments are "used"
if used and re.match("^\s*#", theline):
self.lines_used[i] = -1
elif used and re.match("^\s*$", theline):
self.lines_used[i] = -1
else:
# The ending '}' of hashes
if i and self.lines_used[i-1] != 0 and re.match("^\s*}\s*$", theline):
self.lines_used[i] = self.lines_used[i-1]
else:
used = 0
def dump(self, outputstream):
"""Dumps according to usage, empty lines (N/A) and unused lines."""
if not self.enabled:
return
#outputstream.write("Test coverage for file %s." % self.filename)
for line in range(1, self.max_lines+1):
outputstream.write("%s:%d:%d%s" % (self.filename,line, self.lines_used[line], os.linesep))
def dumpHTML(self, outputdir):
"""Dumps HTML according to usage."""
if not self.enabled:
return
f = self.filename
if f[0] == "/":
f = f[1:]
try:
outpath = outputdir
for i in string.split(f, "/")[:-1]:
outpath = outpath + os.sep + i
try:
os.stat(outpath)
except:
os.mkdir(outpath)
output = file(outpath + os.sep + string.split(f, "/")[-1] + ".html", "wb")
output.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n")
output.write("<html><head>\n")
output.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-15\">\n")
output.write("<title>")
output.write("</title>")
output.write("</head>\n")
output.write("<body>\n")
output.write("<pre>")
lines = self.__getSource__()
for i in range(1, self.max_lines+1):
usecount = self.lines_used[i]
#
# Output usage count
if usecount > 0:
output.write("%8d " % usecount)
else:
output.write(" ")
if usecount > 0:
output.write("<font color=\"#009900\">")
elif usecount == 0:
output.write("<font color=\"#ff0000\">")
elif usecount < 0:
output.write("<font color=\"#999900\">")
l = lines[i]
l = string.replace(l, "\n", "")
l = string.replace(l, "&", "&")
l = string.replace(l, "<", "<")
l = string.replace(l, ">", ">")
output.write(l)
output.write("</font>\n")
except:
for i in sys.exc_info():
print i
output.write("</body></html>\n")
def summary(self, fd, htmlPrefix):
if not self.enabled:
return
thefuncs = self.unused_functions.keys()
if len(thefuncs) == 0:
return
thefuncs.sort()
fd.write("<h3>Unused functions in <a href=\"" + htmlPrefix + self.filename[1:] + ".html\">" + self.filename + "</a>" + "</h3>\n")
for i in thefuncs:
# The [1:] strips the leading '/' char from the filename
# bad for urls...
fd.write(i + "<br />\n")
class TestCoverage:
def __init__(self):
self.files = {}
def add(self, filename, inputfilename, linenumber, bump = 1):
"""Cover a linenumber from a file. The appropriate
FileTestCoverage object will be added if necessary."""
if not self.files.has_key(filename):
self.files[filename] = FileTestCoverage(filename, inputfilename)
self.files[filename].cover(linenumber, bump)
def end(self):
for f in self.files.keys():
self.files[f].check()
def dump(self, outputstream):
for f in self.files.keys():
self.files[f].dump(outputstream)
def dumpHTML(self, outputdir, umask = 022):
"""Dumps HTML files into current directory."""
oldumask = os.umask(umask)
for f in self.files.keys():
self.files[f].dumpHTML(outputdir)
os.umask(oldumask)
def __mycmp__(self, x, y):
if self.files[x].filename < self.files[y].filename:
return -1
if self.files[x].filename > self.files[y].filename:
return 1
return 0
def summary(self, fd, htmlPrefix):
files = self.files.keys()
files.sort(self.__mycmp__)
for f in files:
self.files[f].summary(fd, htmlPrefix)
class CoverageProfile:
def __init__(self):
self.testCoverage = TestCoverage()
# Because python mangles the filenames in frame.f_code.co_filename
# Argh!
self.real_filename_cache = {}
# Regular expressions with which we adjust filenames
self.regexps = []
def do(self, sourcefile):
# BUG
# Make the program believe it is really the master Python
# program.
# DON'T use the __name__: __main__ trick, it doesn't buy you
# anything with
l = {"trace_function": self.trace }
sys.settrace(self.trace)
print sourcefile, os.getcwd()
try:
execfile(sourcefile, l, l)
run = None
for x in l:
try:
if x and issubclass(l[x], unittest.TestCase):
print "Running tests with unittest..."
run = os.getcwd()
# BUG BUG BUG
# Horrible hack
run = re.sub(".*/smw/", "smw/", run)
run += "/" + sourcefile
run = re.sub(".py$", "", run)
run = re.sub("/", ".", run)
break
except:
pass
if run:
print "Running", run, "instead"
unittest.main(run)
except:
# We catch *everything*, even sys.exit()
for i in sys.exc_info():
print "exc", i
import traceback
traceback.print_exc(file=sys.stderr)
sys.settrace(None)
def addFromFile(self, fromfilename):
f = file(fromfilename)
while 1:
line = f.readline()
if not line:
break
(filename, linenumber, refcount) = line.split(":")
inputfilename = filename
# We must remember to mangle the filename when joining
for (re_from, re_to) in self.regexps:
filename = re.sub(re_from, re_to, filename)
self.testCoverage.add(filename, inputfilename, int(linenumber), int(refcount))
def cleanUp(self):
# We are done, give the test coverage some breathing room...
self.testCoverage.end()
def produceHTML(self, outputdir):
try:
os.mkdir(outputdir)
except:
pass # It might exist already
self.testCoverage.dumpHTML(outputdir)
def end(self, fd):
if not fd:
fd = sys.stdout
# Dump statistics
self.testCoverage.dump(fd)
def createSummary(self, fd, htmlPrefix):
if not fd:
fd = sys.stdout
fd.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n")
fd.write("<html><head>\n")
fd.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-15\">\n")
fd.write("<title>Summary for test coverages</title>")
fd.write("</head>\n")
fd.write("<body>\n")
fd.write("<p><strong>User</strong>: %s</p>\n" % (os.environ.get("USER", "<unknown>")))
# bah, %z doesn't seem to work on this python installation... Use %Z
fd.write("<p><strong>Date</strong>: " + time.strftime("%a, %d %b %Y %H:%M:%S %Z", time.localtime()) + "</p>\n")
fd.write("<p>Go to the <a href=\".\">files</a>.</p>\n")
self.testCoverage.summary(fd, htmlPrefix)
fd.write("</body></html>\n")
def addRegexps(self, regexplist):
self.regexps.extend(regexplist)
def trace(self, frame, event, arg):
if event == "return":
return
# This is some magic at the start of the program
filename = frame.f_code.co_filename
if filename == "<string>":
return self.trace
global __trace_lock__
__trace_lock__.acquire()
try:
if self.real_filename_cache.has_key(filename):
filename = self.real_filename_cache[filename]
else:
oldfilename = filename
# Some weirdo python again...
if filename[0] != "/":
filename = os.getcwd() + os.sep + filename
else:
# Fix filenames like:
# /var/tmp/python-2.2.2-root/usr/lib/python2.2/xmlrpclib.py
for (re_from, re_to) in self.regexps:
filename = re.sub(re_from, re_to, filename)
#filename = re.sub("/var/tmp/[^/]*/", "/", filename)
# Add to cache
self.real_filename_cache[oldfilename] = filename
#print filename, frame.f_lineno
self.testCoverage.add(filename, filename, frame.f_lineno)
except:
__trace_lock__.release()
raise
__trace_lock__.release()
return self.trace
def usage():
print __programname__ + " -- Python program coverage tester, version " + __version__
print ""
print "This program is designed to run a series of unittests, one at a time."
print "It gathers information of what Python program lines are executed,"
print "finally producing a summary of executed lines. Currently, output"
print "is available in HTML. A general summary of various data can also"
print "be requested."
print ""
print "Usage: pycov [--help|--version]"
print "Usage: pycov [--coverage=file] [--type=(html|txt)] [--outputdir=dir]"
print " [--summary=file] program arg1..."
print "Usage: pycov --join [--type=(html|txt)] [--outputdir=dir]"
print " [--summary=file] coverage..."
print ""
print "The --join option joins coverage reports."
print "The --coverage option tells into which file the resulting coverage"
print "should be placed."
print "The --summary option produces a (HTML) summary of tests. (N/A)"
print "The --outputdir tells into which dir to create the coverage of each file."
print "Usually, you want to use this option last with --join, after all tests"
print "have been run."
print "The --type option specifies output type. (N/A)."
print ""
longOpts = ["help", "join", "coverage=", "ignore=", "replace=", "type=", "outputdir=", "summary=", "version"]
try:
opts,applicationArgs = getopt.getopt(sys.argv[1:], "", longOpts)
except getopt.GetoptError, e:
raise e
join = 0
coverage=None
type=None
outputdir=None
summary=None
replacethese = []
ignorethese = []
for o,a in opts:
if o == "--help":
usage()
sys.exit(0)
if o == "--version":
print __programname__ + " " + __version__
sys.exit(0)
if o == "--join" and not join:
join = 1
continue
if o == "--replace":
try:
splitchar = a[0]
(_, re_from, re_to, _) = a.split(splitchar)
except:
sys.stderr.write("pycov: Error while parsing regular expression '%s'%s" % (a, os.linesep))
sys.exit(1)
replacethese.append((re_from, re_to))
continue
if o == "--coverage" and not coverage:
coverage=a
continue
if o == "--ignore":
ignorethese.append(a)
continue
if o == "--type":
if a != "txt" and a != "html":
sys.stderr.write("pycov: option " + a + " to --type not supported." + os.linesep)
sys.exit(1)
else:
sys.stderr.write("pycov: warning: ignoring option to --type, producing HTML" + os.linesep)
continue
if o == "--outputdir" and not outputdir:
outputdir = a
continue
if o == "--summary" and not summary:
summary = a
continue
# Default fail
sys.stderr.write("Unknown option or same option given several times." + os.linesep)
sys.exit(1)
c = CoverageProfile()
c.addRegexps(replacethese)
sys.argv = applicationArgs
summaryfd = None
if summary:
# Open now so no chdirs can interfere
summaryfd = file(summary, "wb")
coveragefd = None
if coverage:
coveragefd = file(coverage, "wb")
# Join previous test coverages
if join:
for i in applicationArgs:
c.addFromFile(i)
# Run a test program instead.
#
# This is perhaps not the best way,
# probably depends on how python and PYTHONPATH
# is configured. Argh!^2
else:
if len(sys.argv) == 0:
usage()
sys.exit(1)
cmd = sys.argv[0]
splitted = cmd.split(os.sep)
cmd = splitted[-1]
path = splitted[:-1]
for i in path:
if i == "":
i = "/"
try:
os.chdir(i)
except:
print "Couldn't chdir to", i
sys.exit(255)
#sys.stderr.write("Executing test %s%s" % (cmd, os.linesep))
c.do(cmd)
if coverage:
c.end(coveragefd)
# Cleanup after writing the coverage
c.cleanUp()
if outputdir:
c.produceHTML(outputdir)
if summary:
htmlPrefix = ""
if outputdir:
html_prefix = outputdir
c.createSummary(summaryfd, htmlPrefix)
--- NEW FILE: unittester.py ---
(This appears to be a binary file; contents omitted.)
|
|
From: <de...@us...> - 2004-01-07 02:00:51
|
Update of /cvsroot/pymerase/smw/smw/scw/modeler/unittest
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/scw/modeler/unittest
Added Files:
__init__.py testSCWEditorBasics.py testUMLSCWCorePE.py
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: __init__.py ---
--- NEW FILE: testSCWEditorBasics.py ---
from smw.testdriver.DiagramEditorTester import *
import unittest
class testEditor(unittest.TestCase):
def setUp(self):
self.t=DiagramEditorTester(profile="UML14SFI")
def testEditors(self):
# test adding the elements
valid=["addClassTool","addInterfaceTool","addPackageTool","addLayerTool"]
for x in valid:
self.addPlaceAction(self.t.getMainEditor(),x,50,50,150,150)
# test adding an element above previous element
valid=["addPackageTool"]
invalid=["addClassTool","addInterfaceTool","addLayerTool"]
for x in valid:
self.addPlaceAction(self.t.getMainEditor(),x,50,50,55,55)
for x in invalid:
self.addPlaceAction(self.t.getMainEditor(),x,50,50,55,55,succeed=0)
# test dependency
valid=["addClassTool","addInterfaceTool","addPackageTool","addLayerTool"]
for x in valid:
self.t.testActionCombo(self.t.getMainEditor(),x,"addClassTool","addDependencyTool",selfLink=0)
# test that dependency cannot be created between two layers
self.failingLinkAction(self.t.getMainEditor(),"addLayerTool","addLayerTool","addDependencyTool")
# test Generalization
valid=["addClassTool","addInterfaceTool"]
for x in valid:
self.t.testActionCombo(self.t.getMainEditor(),x,"addClassTool","addGeneralizationTool",selfLink=0)
# test for invalid cases
invalid=["addPackageTool","addLayerTool"]
for x in invalid:
for y in valid:
self.failingLinkAction(self.t.getMainEditor(),x,y,"addGeneralizationTool")
for y in invalid:
self.failingLinkAction(self.t.getMainEditor(),x,y,"addGeneralizationTool")
# test association
valid=["addClassTool","addInterfaceTool"]
for x in valid:
self.t.testActionCombo(self.t.getMainEditor(),"addClassTool",x,"addAssociationTool")
# test for invalid cases
invalid=["addPackageTool","addLayerTool"]
for x in invalid:
for y in valid:
self.failingLinkAction(self.t.getMainEditor(),x,y,"addAssociationTool")
for y in invalid:
self.failingLinkAction(self.t.getMainEditor(),x,y,"addAssociationTool")
def failingLinkAction(self,de,first,second,link):
de.expossed()
h=de.mainWindow.actions.getHandler(first,de)
if not h:
raise "Unknown action",first
h()
firstE=de.currentGesture.onAdd((50,50))
firstP=self.t.presentationsOfElement(firstE,de)[0]
h=de.mainWindow.actions.getHandler(second,de)
if not h:
raise "Unknown action",second
h()
secondE=de.currentGesture.onAdd((150,150))
secondP=self.t.presentationsOfElement(secondE,de)[0]
h=de.mainWindow.actions.getHandler(link,de)
h()
linkE=de.currentGesture.onLink(firstP,secondP,[[50,50],[150,150]])
assert(not linkE)
de.selectAll()
de.deleteSelection()
def addPlaceAction(self,de,a,x1,y1,x2,y2,succeed=1):
print de
h=de.mainWindow.actions.getHandler(a,de)
h()
if not isinstance(de.currentGesture,smw.modeler.Gestures.AddElementG):
raise "action "+str(a)+" does not activate AddElementG"
# create an element
e=de.currentGesture.onAdd((x1,y1))
if not isinstance(e,MetaMM.Element):
raise str(de.currentGesture.onAdd)+" does not return a model element"
if e.presentation.size()==0:
raise "Element "+str(e)+" does not have presentations!"
name1=e.name
e2=de.currentGesture.onAdd((x2,y2))
if succeed:
name2=e2.name
if name1==name2:
raise "Each element should have a different name. Action ",a
pe=self.t.presentationsOfElement(e,de)
if not pe:
raise "Element "+str(e)+" does not a have presentation in the diagram!"
else:
assert(not e2)
self.t.testMove(e,de)
self.t.testHideAndDrop(e,de)
self.t.testDelete(e,de)
de.selectAll()
de.deleteSelection()
if __name__ == '__main__':
unittest.main()
--- NEW FILE: testUMLSCWCorePE.py ---
from smw.scw.modeler.UMLSCWCorePE import *
from smw.metamodel import UML14
from smw.modeler import DialogEditor
from smw.scw.modeler.UMLSCWAssociationEditor import *
from smw.scw.modeler.UMLSCWOperationEditor import *
from smw.scw.modeler.UMLSCWAttributeEditor import *
from smw.scw.modeler.UMLSCWModelElementPE import *
from smw.smwQtApplication import *
from smw.metamodel import TransactionManager
from smw.modeler.profiles.scwProfile import *
from smw import Project
import unittest
class testPropertyEditors(unittest.TestCase):
def testEditors(self):
a=testUMLSCWCorePE()
class testUMLSCWCorePE(smwQtApplication):
def __init__(self):
smwQtApplication.__init__(self)
self.metamodel=metamodel
#self.project=Proj()
#self.project=Project()
#self.project.theSFIManager=SfiManager(TransactionManager.theTM)
temp=['smw.scw.modeler.UMLSCWCore',
'smw.modeler.UMLADEditor',
'smw.modeler.UML.UMLSCEDitor',
'smw.modeler.UML.UMLCollaborationEditor',
'smw.modeler.UML.UMLUCEEditor',
'smw.modeler.UML.UMLSDEditor']
self.project=Project.Project("ProjectName",SCWProfile("te",self.metamodel,temp))
self.sMan=self.project.getProfile().theSFIManager
#self.project.root=self.metamodel.Model()
self.processEvents()
self.move(0,0)
self.resize(700,500)
self.sMan.focusOnElement(self.sMan.currentProject())
A=self.sMan.newClass()
self.test(UMLSCWClassPE,[Class],[A])
self.test(UMLSCWApplicationPE,[Class],[A])
self.test(UMLSCWTestDocumentationPE,[Class],[A])
TC=self.sMan.layerManager().getTestClient(A)
self.test(UMLSCWClassDocumentationPE,[Class],[TC])
#self.test(UMLSCWParameterPE,[Parameter],[])
self.sMan.focusOnElement(A)
OP=self.sMan.newOperation()
self.test(UMLSCWOperationPE,[Operation],[OP])
self.sMan.focusOnElement(A)
AT=self.sMan.newAttribute()
self.test(UMLSCWAttributePE,[Attribute],[AT])
self.sMan.focusOnElement(self.sMan.currentProject())
B=self.sMan.newClass()
AS=self.sMan.newAssociation(A,B)
self.test(UMLSCWAssociationPE,[Association],[AS])
self.sMan.focusOnElement(self.sMan.currentProject())
PA=self.sMan.newPackage()
IN=self.sMan.newInterface()
LA=self.sMan.newLayer()
self.sMan.focusOnElement(LA)
CLA=self.sMan.newClass()
DE=self.sMan.newDependency(A,B)
GE=self.sMan.newGeneralization(A,B)
self.test(UMLSCWModelElementPE,[Interface,Package,"Layer",Dependency,Generalization],[IN,PA,LA,DE,GE])
self.test(UMLSCWLayerPE,["Layer"],[LA])
self.test(UMLSCWRunPackageTestsPE,[Package],[PA])
self.test(UMLSCWCorrectnessPE,[Class,Package,"Layer"],[A,PA,LA])
self.test(UMLSCWAttributeListPE,[Class],[A])
self.test(UMLSCWClass1PE,[Class],[CLA])
self.test(UMLSCWOperationListPE,[Interface,Class],[IN,A])
self.test(UMLSCWParameterListPE,[Operation],[OP])
self.pe.focusOn(None)
self.processEvents()
def test(self,PEClass,supported,elementsToEdit):
assert(issubclass(PEClass,PropertyEditor))
print "Testing ",PEClass.__name__
self.pe=PEClass(self,self.project)
self.pe.resize(600,400)
self.pe.show()
for c in supported:
e=self.makeElement(c)
self.project.history.clear()
assert(e)
self.pe.focusOn(e)
self.processEvents()
self.pe.apply()
if self.project.history.canUndo():
print "PropertyEditor ",PEClass,"modifies the model without user interaction. BAD!"
assert(0)
if issubclass(PEClass,ListPropertyEditor):
for x in supported:
e=self.makeElement(x)
assert(e)
self.pe.focusOn(e)
self.processEvents()
self.pe.add()
self.pe.add()
self.pe.add()
self.pe.add()
self.pe.add()
self.pe.delete([0,1,2,3,4])
for x in elementsToEdit:
assert(self.pe.canEdit(x))
self.pe.focusOn(e)
for i in range(1000):
self.processEvents()
self.pe.apply()
self.processEvents()
def makeElement(self,x):
self.sMan.focusOnElement(self.sMan.currentProject())
if x==self.metamodel.Class:
a= self.sMan.newClass()
return a
elif x==self.metamodel.Interface:
a=self.sMan.newInterface()
return a
elif x==self.metamodel.Package:
a=self.sMan.newPackage()
return a
elif x==self.metamodel.Attribute:
self.sMan.newClass()
return self.sMan.newAttribute()
elif x==self.metamodel.Operation:
self.sMan.newClass()
return self.sMan.newOperation()
elif x==self.metamodel.Association:
a= self.sMan.newClass()
self.sMan.focusOnElement(self.sMan.currentProject())
b= self.sMan.newClass()
as=self.sMan.newAssociation(a,b)
return as
elif x=="Layer":
a=self.sMan.newLayer()
return a
elif x==self.metamodel.Dependency:
a= self.sMan.newClass()
self.sMan.focusOnElement(self.sMan.currentProject())
b= self.sMan.newClass()
as=self.sMan.newDependency(a,b)
return as
elif x==self.metamodel.Generalization:
a= self.sMan.newClass()
self.sMan.focusOnElement(self.sMan.currentProject())
b= self.sMan.newClass()
as=self.sMan.newGeneralization(a,b)
return as
else:
return x()
if __name__ == '__main__':
unittest.main()
|
|
From: <de...@us...> - 2004-01-07 01:48:33
|
Update of /cvsroot/pymerase/smw/smw/scw/Project/unittests
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/scw/Project/unittests
Added Files:
__init__.py testSfiManager.py
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: __init__.py ---
__all__ = ['testSfiManager']
from testSfiManager import *
--- NEW FILE: testSfiManager.py ---
#!/usr/bin/env python2
__layer__ = 'Project'
import unittest
from smw.metamodel import UML14 as metamodel
#from LayerManager import LayerManager
from smw.scw.Project.SfiManager import SfiManager
import tempfile
import time
import os.path
def mkUniqueStr():
"""really unique string"""
s = str(tempfile.mktemp()) + str(time.time())
s = s.replace('/', '')
s = s.replace('.', '')
s = s.replace('@', '')
return s
def removeFiles(fnames):
""" Deletes the files with the name added into the fnames array. """
for n in fnames:
if os.path.isfile(n):
try:
os.remove(n)
except:
pass
class testSfiManager(unittest.TestCase):
def setUp(self):
self.sMan=obj2test
self.sMan.setUp()
def testDeleteProject(self):
"Testing the delete function in SfiManager"
# testing with a correct case:
self.sMan.setUp()
name=mkUniqueStr()
p=self.sMan.newProject(name)
self.assert_(p,"Project was created.")
self.assert_(self.sMan.currentProject()==p,"Wrong current project.")
rv=self.sMan.deleteProject(p.name)
self.assert_(rv==p,"Wrong return value from the function.")
self.assert_(self.sMan.currentProject()==None,"Wrong current project.")
self.assert_(not self.sMan.projects().has_key(p.name),"Failed to remove the project from the dict.")
# testing with invalid parameters (with a project):
self.sMan.setUp()
name=mkUniqueStr()
p=self.sMan.newProject(name)
ivalues=[None, mkUniqueStr(), metamodel.Model()]
for iv in ivalues:
rv=self.sMan.deleteProject(iv)
self.assert_(not rv,"Wrong return value.")
self.assert_(self.sMan.currentProject()==p,"Incorrect current project.")
# testing with invalid parameters (without a project):
self.sMan.setUp()
ivalues=[None, mkUniqueStr(), metamodel.Model()]
for iv in ivalues:
rv=self.sMan.deleteProject(iv)
self.assert_(not rv,"Wrong return value.")
self.assert_(self.sMan.currentProject()==None,"Incorrect current project.")
## self.sMan.newProject('name2')
## origLength=len(self.sMan.projects().keys())
## self.sMan.deleteProject('name1')
## self.failIf(self.sMan.projects().has_key('name1'),"Deleting in SwfiManager unsuccesfull(1)")
## length=len(self.sMan.projects().keys())
## self.assertEqual((length+1),origLength,"Deleting in SwfiManager unsuccesfull(2)")
## name='name3'
## self.sMan.newProject(name)
## m=self.sMan.projects()[name]
## uModel1 = self.sMan.deleteProject(name)
## self.assert_(uModel1 == m, "deleteProject did not return the project.")
## uModel2 = self.sMan.deleteProject(name)# This should fail
## self.assert_(uModel2==None, "None-value was not returned.")
## # Test that current element is deleted.
## self.sMan.setUp()
## proj1=self.sMan.newProject("Project1")
## #self.sMan.newClass()
## proj2=self.sMan.newProject("Project2")
## #self.sMan.newClass()
## current=self.sMan.currentProject()
## self.sMan.deleteProject(self.sMan.currentProject().name)
## self.assertEqual(self.sMan.currentProject(),proj1,"wrong current project after deleting project")
## self.assertNotEqual(self.sMan.currentProject(),current,"The current element was deleted")
## ## # testing delete the namespace of the python package
## self.sMan.setUp()
## p1=self.sMan.newProject()
## self.assert_(p1,"project was not created")
## p2=self.sMan.newProject()
## self.assert_(p2,"project was not created")
## self.assertEqual(self.sMan.pythonPackage().namespace,p2,"wrong namespace")
## self.assertEqual(self.sMan.currentProject(),p2,"wrong current project")
## rv=self.sMan.deleteProject(p2.name)
## self.assertEqual(p2,rv,"wrong return value")
## self.assertEqual(self.sMan.currentProject(),p1,"wrong current project after delete")
## self.assertEqual(self.sMan.pythonPackage().namespace,p1,"namespace should have changed")
# test deleting a project with the project as parameter
self.sMan.setUp()
for p in range(3):
proj=self.sMan.newProject()
len1=len(self.sMan.projects())
pr=self.sMan.deleteProject(proj)
len2=len(self.sMan.projects())
self.assert_(len1==len2+1,"didn't delete the project")
self.assert_(pr==proj,"didn't delete the project")
def testRenameProject(self):
"Testing the rename function in SwfiManager."
self.sMan.setUp()
name=mkUniqueStr()
N=10
p=self.sMan.newProject(name)
self.assert_(p,"project was not created.")
for x in range(N):
uname=mkUniqueStr()
n=self.sMan.renameProject(self.sMan.currentProject().name,uname)
self.assert_(n==uname,"Wrong return value.")
self.assert_(self.sMan.currentProject().name==n,"Wrong name for the project.")
self.assert_(self.sMan.currentProject()==p,"Wrong current project.")
# Testing for invalid values:
name=mkUniqueStr()
rv=self.sMan.renameProject(self.sMan.currentProject().name,name)
self.assert_(rv==name,"Wrong name.")
invalidValues=["in.valid.name", None, "", name]
for iv in invalidValues:
rv=self.sMan.renameProject(self.sMan.currentProject().name,iv)
self.assert_(rv==None,"None should be returned.")
self.assert_(self.sMan.currentProject()==p,"Wrong current project.")
self.assert_(self.sMan.currentProject().name==name,"Name was changed.")
## self.sMan.setUp()
## oldName="name3"
## newName="name4"
## oldName1="name5"
## newName1="name6"
## self.sMan.newProject(oldName)
## m=self.sMan.projects()[oldName]
## self.sMan.renameProject(oldName,newName)
## self.assertEqual(self.sMan.projects()[newName],m,"Renaming in SwfiManager unsuccesfull(1)")
## self.failIf(self.sMan.projects().has_key(oldName),"Renaming in SwfiManager unsuccesfull(2)")
## self.assertEqual(self.sMan.projects()[newName].name,newName,"Error in updating the renaming to umlModel")
## rName = self.sMan.renameProject(oldName, newName)# Trying to rename oldname again. this should fail.
## self.assert_(rName == None,"Renaming function did not return 'None' when it failed. ")
## self.setUp()
## self.sMan.newProject(oldName1)
## rName = self.sMan.renameProject(oldName1, newName1)# Trying rename correctly.
## self.assert_(rName == newName1,"Renaming function did not return the correct name")
## #self.sMan.newProject("returnTest")
## #self.sMan.newProject("returnTest1")
## #testi=self.sMan.renameProject(oldName1,newName1)# Trying to give an existing name.
## #self.assertEqual(testi,None,"Failure in renaming: None not received")
## #testing renaming with invalid new names
## #self.sMan.newProject("temp")
## testi=self.sMan.renameProject("returnTest","invalid.1")
## self.assertEqual(testi,None,"Was able to rename project with invalid name")
def test__init__(self):
"Testing the initialization of SwfiManager"
self.sMan.setUp()
self.assertNotEqual(self.sMan, None,'The creation of an object was not succesful.')
self.assertEqual(self.sMan.projects(), {}, 'Dictionary was not initialized')
def testNewProject(self):
"Testing the NewProject-method"
# Make sure that it is impossible to create multiple projects.
N=10
self.sMan.setUp()
p=self.sMan.newProject()
self.assert_(p, "Project was not created.")
self.assert_(self.sMan.currentProject()==p,"Wrong current project.")
for x in range(N):
pn=self.sMan.newProject()
self.assert_(not pn, "Project p2 was not created.")
self.assert_(self.sMan.currentProject()==p,"Wrong current project.")
self.sMan.setUp()
length=len(self.sMan.projects())
self.sMan.newProject("NewProject1")
self.assertEqual(len(self.sMan.projects()),length+1,"The new project was not inserted.")
self.assert_(self.sMan.projects().has_key("NewProject1"), "The method did't create an appropriate key.")
#testing with different paramter sets
cvalues=[mkUniqueStr(),"",None]
for v in cvalues:
self.sMan.setUp()
pn=self.sMan.newProject()
self.assert_(pn, "Project pn was not created.")
self.assert_(self.sMan.currentProject()==pn,"Wrong current project.")
#testing with invalid paramter sets:
self.sMan.setUp()
p=self.sMan.newProject()
self.assert_(p, "Project was not created.")
self.assert_(self.sMan.currentProject()==p,"Wrong current project.")
ivalues=["in.valid.name",metamodel.Package()]
for iv in ivalues:
self.sMan.setUp()
rv=self.sMan.newProject(iv)
self.assert_(not rv,' %s None should be returned.' % iv)
self.assert_(None==self.sMan.currentProject(),"Wrong current project.")
def testPythonPackage(self):
self.sMan.setUp()
self.assert_(not self.sMan.pythonPackage(),'should be no python package')
p=self.sMan.newProject()
self.assert_(p,'project was not created')
py=self.sMan.pythonPackage()
self.assert_(py,'No python package')
found=None
for o in p.ownedElement:
if o.name=='python2_2':
found =1
self.assert_(found,'python package not found')
# testing that the package object does not change when trying to create more projects than one
N=10
for x in range(N):
pr=self.sMan.newProject()
self.assert_(not pr,'more projects than one')
self.assertEqual(self.sMan.pythonPackage(),py,'object changed')
## length=len(self.sMan.projects())
## self.sMan.newProject()
## self.assertEqual(len(self.sMan.projects()),length+1,"The new project without name was not inserted")
## self.sMan.setUp()
## for x in range(3):
## self.sMan.newProject()
## keys=self.sMan.projects().keys()
## self.assertEqual(len(keys),3,"Failure in newProject: two or more projects with the same name(1)")
## for key in keys[1:]:
## self.sMan.deleteProject(key)
## for x in range(3):
## self.sMan.newProject()
## keys=self.sMan.projects().keys()
## self.assertEqual(len(keys),4,"Failure in newProject: two or more projects with the same name(2)")
## self.sMan.newProject('addedName')
## test2=self.sMan.newProject('addedName')
## self.assertEqual(test2,None,"Failure in newProject: adding already existing name failed")
## length=len(self.sMan.projects())
## test3=self.sMan.newProject('another')
## if (test3!=None):
## self.assertEqual(len(self.sMan.projects()),length+1,"Failure in newProject: count doesn't match")
## name = 'qwewqeqwe'
## self.assert_(self.sMan.newProject(name), 'failed to create a project')
## self.assert_(not self.sMan.newProject(name), 'project with the same name created twice')
## #testing creating a new project with invalid name
## test=self.sMan.newProject("invalid-1")
## self.assertEqual(test,None,"Was able to create a new project with invalid name")
def testCurrentProject(self):
self.sMan.setUp()
#test with an empty sman:
self.assert_(self.sMan.currentProject()==None,"wrong current project.")
#test with a project
p=self.sMan.newProject(mkUniqueStr())
self.assert_(p, "project was not created.")
self.assert_(self.sMan.currentProject()==p, "Wrong current project.")
## self.assertEqual(self.sMan.currentProject(), None, "The value of attribute was not None.")
## self.sMan.newProject("Project1")
## self.sMan.newProject("Project2")
## self.assertNotEqual(self.sMan.currentProject(), None, "After the addition the reference shouldn't be None.")
## # Delete the model that is currently referenced.
## deletedModel=self.sMan.deleteProject(self.sMan.currentProject().name)
## self.assertNotEqual(self.sMan.currentProject(), None, "There is a model left, so the value of the attribute shouldn't be None.")
## self.assertNotEqual(deletedModel.name,self.sMan.currentProject().name,"The reference should have changed.")
## self.sMan.deleteProject(self.sMan.currentProject().name)
## self.assertEqual(self.sMan.currentProject(), None, "The last model was deleted, so the reference should be none")
def testFocusOnProject(self):
#testing the focus changing using string as parameter
self.sMan.setUp()
name=mkUniqueStr()
p=self.sMan.newProject(name)
self.assert_(p,"Project was not created.")
self.assert_(p==self.sMan.currentProject(),"Wrong current project.")
rv=self.sMan.focusOnProject(name)
self.assert_(rv==p, "Wrong returnvalue.")
self.assert_(p==self.sMan.currentProject(),"Wrong current project.")
# Focus using a project object:
rv=self.sMan.focusOnProject(p)
self.assert_(rv==p, "Wrong returnvalue.")
self.assert_(p==self.sMan.currentProject(),"Wrong current project.")
# Testing with invalid values:
self.sMan.setUp()
ivalues=[metamodel.Model(), None]
for iv in ivalues:
rv=self.sMan.focusOnProject(iv)
self.assert_(not rv, '%s parameter should return None' % iv)
self.assert_(None==self.sMan.currentProject(),"Wrong current project.")
## self.sMan.setUp()
## anotherModelName=""
## self.sMan.newProject("Project1")
## #self.sMan.newProject("Project2")
## currentModelName=self.sMan.currentProject().name
## if(currentModelName=="Project1"):
## anotherModelName="Project2"
## elif(currentModelName=="Project2"):
## anotherModelName="Project1"
## else:
## self.assertNotEqual(0,0,"Something has gone VERY wrong!!!")
## #self.sMan.focusOnProject(anotherModelName)
## #self.assertEqual(self.sMan.currentProject().name,anotherModelName,"Failed to change focus to another model(1)")
#testing the focus changing using Model object as parameter
#changing the test attributes to describe the current situation
## currentModelName,anotherModelName=anotherModelName,currentModelName
## anotherModel=self.sMan.projects()[anotherModelName]
## self.sMan.focusOnProject(anotherModel)
## self.assertEqual(self.sMan.currentProject().name,anotherModel.name,"Failed to change focus to another model(2)")
## #testing the return value of the method
## self.sMan.setUp()
## test=self.sMan.focusOnProject("testing")
## self.assertEqual(test,None,"was able to focus on nonexistent project")
## project1=self.sMan.newProject("newProject1")
## project2=self.sMan.newProject("newProject2")
## test=self.sMan.focusOnProject("newProject1")
## self.assertEqual(project1,test,"failed to focus (using string) on project")
## test=self.sMan.focusOnProject(project2)
## self.assertEqual(self.sMan.currentProject().name,"newProject2","failed to focus (using object) on project")
# Test for python package namespace change on focus.
## self.sMan.setUp()
## N=10
## projects=[]
## for x in range(N):
## projects.append(self.sMan.newProject())
## self.assert_(len(projects)==10,"Wrong number of projects created.")
## for p in projects:
## self.sMan.focusOnProject(p)
## self.assert_(self.sMan.currentProject()==p,"Wrong current project.")
## self.assert_(self.sMan.pythonPackage(), "No python package.")
## self.assert_(self.sMan.pythonPackage().namespace==p,"Wrong namespace for the python package.")
def testSaveProject(self):
# test1
self.sMan.setUp()
project0 = self.sMan.newProject("newProject0")
self.sMan.focusOnProject("newProject0")
sname = self.sMan.saveProject()
self.sMan.setUp()
self.sMan.loadProject("newProject0.iml")
self.assert_(self.sMan.currentProject().name == project0.name, "Failure in saveProject: the proper project was not loaded")
self.assert_(sname == "newProject0", "Failure in saveProject: the proper filename was not returned.")
# test2
self.sMan.setUp()
sname = self.sMan.saveProject()
self.assert_(sname == None, "Failure in saveProject: None -value was not returned.")
# Cleanup the files:
try:
os.remove("newProject0.iml")
except:
pass
def testSaveProjectAs(self):
# test1
self.sMan.setUp()
project2 = self.sMan.newProject("newProject2")
self.sMan.focusOnProject("newProject2")
sname = self.sMan.saveProjectAs("newProject2.iml")
self.sMan.setUp()
self.sMan.loadProject("newProject2.iml")
self.assert_(self.sMan.currentProject().name == project2.name, "Failure in saveProjectAs: the proper project was not loaded back")
self.assert_(sname == "newProject2", "Failure in saveProjectAs: the proper filename was not returned.")
# test2
self.sMan.setUp()
sname = self.sMan.saveProjectAs("newProject3.iml")
self.assert_(sname == None, "Failure in saveProjectAs: None -value was not returned.")
# Cleanup the files:
try:
os.remove("newProject2.iml")
except:
pass
def testLoadProject(self):
# Test with multiple files on disk (unnessary)
self.sMan.setUp()
projects=[]
fnames=[]
N=3
for x in range(N):
p=self.sMan.newProject()
projects.append(p)
fnames.append(p.name+".iml")
self.assert_(p,"Project was not created.")
rv=self.sMan.saveProject()
self.assert_(rv==p.name,"Wrong returnvalue on save.")
self.sMan.setUp()
self.assert_(not self.sMan.currentProject(),"Current project should be none")
#loading begins:
for x in range(N):
rv=self.sMan.loadProject(p.name+".iml")
self.assert_(rv, "Wrong return value on load.")
self.assert_(self.sMan.currentProject().name==projects[x].name, "Wrong project loaded back.")
self.sMan.setUp()
self.assert_(not self.sMan.currentProject(),"Current project should be none.")
removeFiles(fnames) # cleanup
# Testing with invalid parameters:
self.sMan.setUp()
ivalues=[None,mkUniqueStr(),metamodel.Model(),"invalid.name"]
for iv in ivalues:
rv=self.sMan.loadProject(iv)
self.assert_(not rv, 'Wrong return value with parameter: %s' % iv)
self.assert_(not self.sMan.currentProject(), "Current project should be none.")
# Trying to load project with an existing project with the same name. and also with a project
# with different name
self.sMan.setUp()
name=mkUniqueStr()
fnames=[name+".iml"]
p=self.sMan.newProject(name)
self.assert_(p,"Project was not created.")
self.sMan.saveProject()
self.assert_(self.sMan.currentProject()==p, "Current project is inocorrect.")
# project with the same name:
# self.sMan.setUp()
lp=self.sMan.loadProject(p.name)
self.assert_(not lp,"No project should be loaded.")
self.assert_(self.sMan.currentProject()==p, "Current project is inocorrect.")
# project with different name:
self.sMan.setUp()
p2=self.sMan.newProject()
self.assert_(p2,'project was not created')
lp=self.sMan.loadProject(p.name)
self.assert_(not lp,"No project should be loaded.")
self.assert_(self.sMan.currentProject()==p2, "Current project is inocorrect.")
removeFiles(fnames)
## # test1
## self.sMan.setUp()
## project4 = self.sMan.newProject("newProject4")
## self.sMan.focusOnProject("newProject4")
## self.sMan.saveProject()
## self.sMan.setUp()
## uModel=self.sMan.loadProject("newProject4")
## self.assert_(uModel.name == project4.name, "Failure in loadProject: the proper project was not returned.")
## self.assert_(self.sMan.currentProject().name == project4.name, "Failure in loadProject: the _currentProject variable was not properly set.")
## self.assert_(self.sMan.projects().has_key("newProject4"), "Failure in loadProject: the project was not added to the projects() -dictionary.")
## #test 3: tests that loading causes one class to be assigned to current element.
## self.sMan.setUp()
## project5=self.sMan.newProject("newProject5")
## self.sMan.saveProject()
## self.sMan.setUp()
## self.sMan.loadProject("newProject5")
## # self.assertEqual(self.sMan.currentElement().name,project5.name,"The project should be the current element after load.")
### self.sMan.newClass("class1")
## # self.assertEqual(self.sMan.currentElement().name,"class1","The class should be current element before saving")
## self.sMan.saveProject()
## self.sMan.setUp()
## self.sMan.loadProject("newProject5")
## # self.assertEqual(self.sMan.currentElement().name,project5.name,"The project should be the current element after load.")
## ####
## a=[]
## self.sMan.setUp()
## for x in range(5):
## self.sMan.newProject()
## a.append(self.sMan.saveProject())
## self.sMan.setUp()
## for x in range(5):
## sname=a.pop(0)
## self.sMan.loadProject(sname)
## for x in range(5):
## self.sMan.newProject()
## self.assert_(len(self.sMan.projects().keys())==10, "Failure in newProject: could not create new files")
#THIS TEST WILL BE UPDATED
# test that the python package is the same after loading
## a=[]
## self.sMan.setUp()
## for x in range(5):
## self.sMan.newProject()
## a.append(self.sMan.saveProject())
## self.sMan.setUp()
## for x in range(5):
## sname=a.pop(0)
## p=self.sMan.loadProject(sname)
## self.assert_(p,"Project was not loaded back.")
## elements=self.sMan._layerManager.returnElements(p)
## ppack=None
## for e in elements:
## if (e.oclIsKindOf(metamodel.Package) and e.name=="python2.2"):
## ppack=e
## self.assert_(ppack, "Python package was not found.")
## self.assert_(ppack==self.sMan.pythonPackage(),"Wrong python package instance.")
## self.assert_(ppack.namespace, "No namespace for the ppackage.")
## try:
## os.remove(sname+".xml")
## except:
## pass
## # Cleanup the files:
## try:
## os.remove("newProject4.xml")
## os.remove("newProject5.xml")
## os.remove("noname1.xml")
## os.remove("noname2.xml")
## os.remove("noname3.xml")
## os.remove("noname4.xml")
## os.remove("noname5.xml")
## except:
## pass
if __name__ == '__main__':
obj2test = SfiManager()
unittest.main()
|
|
From: <de...@us...> - 2004-01-07 01:48:33
|
Update of /cvsroot/pymerase/smw/smw/scw/Element
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/scw/Element
Added Files:
LayerManager.py SfiManager.py __init__.py python.iml
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: LayerManager.py ---
#!/usr/bin/env python2
__layer__ = 'Element'
import unittest
from smw.metamodel import UML14 as metamodel
from smw.transform.uml2py.uml2py import isNameValid
import string
def mkTestCaseName(name):
"""returns name for test case of class 'name'"""
tName = string.capitalize(name[0]) + name[1:]
tName = unittest.TestLoader.testMethodPrefix + tName
return tName
mkTestMethodName = mkTestCaseName
def mkTestDependencyName(name):
""" Returns a name for the dependency between the class and its testclass """
[...1271 lines suppressed...]
"""
Create a unique name for element and returns it
"""
if not isinstance(name,str):
return None
if not(isinstance(element,metamodel.ModelElement)):
return None
eles=self.returnElements(element)
names=[]
for k in eles:
names.append(k.name)
x=1
while(names.count(name+str(x))>0):
x=x+1
return name+str(x)
--- NEW FILE: SfiManager.py ---
#!/usr/bin/env python2
"""
This layer can add different elements to the model. Also deleting and renaming
elements is added here
"""
__layer__ = 'Element'
from smw.metamodel import UML14 as metamodel
from smw.transform.uml2py.uml2py import isNameValid
from LayerManager import LayerManager
from smw.scw.Project.SfiManager import SfiManager as ProjectSfiManager
from LayerManager import mkTestCaseName, mkTestMethodName,mkTestDependencyName
def mkUnittestDependencyName(pname):
return pname+"UTDep"
class SfiManager(ProjectSfiManager):
def __init__(self):
"""
Constructor for a new SfiManager.
"""
ProjectSfiManager.__init__(self)
def setUp(self):
ProjectSfiManager.setUp(self)
self._layerManager=LayerManager()
self._currentElements={}
self._unittestPackage={}
self._testCaseClass={}
def unittestPackage(self):
""" Returns the unitest package """
return self._unittestPackage
def testCaseClass(self):
""" Returns the testcaseclass dictonary """
return self._testCaseClass
def layerManager(self):
""" returns an instance of the LayerManager class """
return self._layerManager
def newProject(self, projectName = None):
"""
Calls the newProject method in Project layer. Initializes the created project to the currentElements dictionary.
"""
project=ProjectSfiManager.newProject(self,projectName)
if project==None:
return None
for x in project.ownedElement:
if(x.name=="python2_2"):
for q in x.ownedElement:
if(q.name=="unittest"):
self._unittestPackage[project]=q
for y in q.ownedElement:
if(y.name=="TestCase"):
self._testCaseClass[project]=y
break
self._currentElements[project.name]=self.currentProject()
d=self.addUnittestDependency(project)
assert(d)
return project
def deleteProject(self, arg):
"""
Calls the method in Project layer. Deletes the project from the currentElements dictionary.
"""
deletedProject=ProjectSfiManager.deleteProject(self,arg)
if deletedProject==None:
return None
# delete the dependency to unittest package
# NÄITÄ EI TARVITISI TEHDÄ NYT KUN KÄYTETÄÄN KAIKLLA PROJEKTEILLA OMAA PYTHON PAKKAUSTA
for d in deletedProject.clientDependency:
for c in d.supplier:
if(c==self._unittestPackage[deletedProject]):
self.deleteElement2(d)
for e in self._layerManager.returnElements(deletedProject):
if isinstance(e,metamodel.Class) and self._layerManager.getTestSupplier(e):
for g in e.generalization:
p=g.parent
if p==self._testCaseClass[deletedProject]:
self.deleteElement2(g)
del self._testCaseClass[deletedProject]
del self._unittestPackage[deletedProject]
if isinstance(arg,str):
del self._currentElements[arg]
elif isinstance(arg,metamodel.Model):
del self._currentElements[arg.name]
return deletedProject
def renameProject(self, oldName, newName):
"""
Calls the method in Project layer. Changes the key in the currentElements dictionary.
"""
eles=self._layerManager.returnElements(self.currentProject())
pnames=[]
for e in eles:
if e.oclIsKindOf(metamodel.Package) and not e.oclIsKindOf(metamodel.Model):
pnames.append(e.name)
if newName in pnames:
return
rName=ProjectSfiManager.renameProject(self,oldName,newName)
if rName==None:
return None
value=self._currentElements[oldName]
del self._currentElements[oldName]
self._currentElements[newName]=value
return rName
def loadProject(self, fname):
"""
Loads a project.
set the current element correctly.
"""
uModel = ProjectSfiManager.loadProject(self,fname)
if uModel:
self._currentElements[uModel.name]=uModel
for x in range(len(uModel.ownedElement)):
e=uModel.ownedElement[x]
if (e.oclIsKindOf(metamodel.Package) and e.name=="python2_2"):
# Find the loaded packages:
# loadedUTPackage=None
# loadedTestCaseClass=None
for y in e.ownedElement:
if(y.name=="unittest"):
# loadedUTPackage=y
self._unittestPackage[uModel]=y
for z in y.ownedElement:
if(z.name=="TestCase"):
# loadedTestCaseClass=z
self._testCaseClass[uModel]=z
break
packs=[]
classes=[]
lclclc=self._layerManager.returnElements(uModel)
for p in lclclc:
if p.oclIsKindOf(metamodel.Package):
packs.append(p)
for clas in lclclc:
if clas.oclIsKindOf(metamodel.Class):
classes.append(clas)
for c in classes:
# mark the class abstract if all it's operations do not have methods
for f in c.feature:
if f.oclIsKindOf(metamodel.Operation) and not f.method:
c.isAbstract=1
# check if the class is in python package
ns=c.namespace
inpp=None
while not ns==uModel:
if ns.name=='python2_2':
inpp=1
ns=uModel
else:
ns=ns.namespace
if not inpp:
if not self._layerManager.isTestClass(c):
if not self._layerManager.getTestClient(c):
tc=metamodel.Class()
tc.name=mkTestCaseName(c.name)
tc.namespace=c.namespace
self._layerManager.attachTag(tc,'testcase')
self.newDependency(c,tc,mkTestDependencyName(c.name))
self.newGeneralization(self._testCaseClass[uModel],tc)
# add operations and methods to testClass
# test class is made concrete, even if the real class is not
ops=c.feature.select(lambda x: x.oclIsKindOf(metamodel.Operation))
for o in ops:
to=self._layerManager.newOperation(tc,mkTestMethodName(o.name))
if o.method:
for m in o.method:
self._layerManager.newMethod(tc,mkTestMethodName(o.name),to)
## else:
## self._layerManager.newMethod(tc,mkTestMethodName(o.name),to)
else:
tc.isAbstract=1
for p in packs:
ns=p
inpp=None
while not ns==uModel:
if ns.name=='python2_2':
inpp=1
ns=uModel
else:
ns=ns.namespace
if not inpp:
ud=None
for d in p.clientDependency:
for s in d.supplier:
if s==self.unittestPackage()[uModel]:
ud=d
if not ud:
self.newDependency(self.unittestPackage()[uModel],p,mkUnittestDependencyName(p.name))
self.focusOnElement(uModel)
return uModel
## lElements=self._layerManager.returnElements(uModel)
## for y in lElements:
## # Create new unittest dependecies (and remove old ones):
## if (y.oclIsKindOf(metamodel.Package)):
## classes=y.ownedElement.select(lambda z: z.oclIsKindOf(metamodel.Class))
## if (classes):
## deps=y.clientDependency.select(lambda z: z.supplier.select(lambda w: w==loadedUTPackage))
## if (deps and len(deps)==1):
## d=deps[0]
## s=d.supplier[0]
## c=d.client[0]
## self._layerManager.deleteElement2(d)
## self.newDependency(s,self._unittestPackage, mkUnittestDependencyName(c))
## # Create new generalizations for test classes (and remove the old ones):
## if (y.oclIsKindOf(metamodel.Class) and not self._layerManager.getTestClient(y)):
## gens=y.generalization.select(lambda z: z.parent==loadedTestCaseClass)
## if gens and len(gens)==1:
## g=gens[0]
## p=g.parent
## c=g.child
## self._layerManager.deleteElement2(g)
## self.newGeneralization(p,self._testCaseClass)
## self.deleteElement2(uModel.ownedElement[x])
## break
## uModel.ownedElement.append(self.pythonPackage())
def currentElement(self,proj=None):
"""
Returns the current element of the project given as parameter
-if no parameter is given returns the current element of the current project
"""
if(proj==None):
if(len(self.projects())<1):
return None
else:
return self._currentElements[self.currentProject().name]
if(isinstance(proj,metamodel.Model)):
for x in self.projects().keys():
if(x==proj.name):
return self._currentElements[proj.name]
return self.currentElement()
elif(isinstance(proj,str)):
for x in self.projects().keys():
if(x==proj):
return self._currentElements[proj]
return self.currentElement()
else:
return self.currentElement()
def focusOnElement(self,object):
"""
Focuses on the given element or project and returns it if
-given parameter is of valid type
-given parameter exists in manager
else returns the previous current element
"""
owner=object
if(isinstance(object,metamodel.Method) or isinstance(object,metamodel.Attribute) or isinstance(object,metamodel.Operation)):
owner1=object.owner
if(owner1==None): #the object isn't attached to any class or interface
owner=owner.namespace
if(owner==None):#the object isn't attached to any project
return self.currentElement()
else: #owner1!=None
owner=owner1
if(isinstance(owner,metamodel.Class) or isinstance(owner,metamodel.Interface) or isinstance(owner,metamodel.Generalization) or isinstance(owner,metamodel.Association) or isinstance(owner,metamodel.Dependency) or isinstance(owner,metamodel.Package) or isinstance(owner,metamodel.Model)): #tests if the object is a class diagram element
#gets the project in which the owner belongs
while(not isinstance(owner,metamodel.Model)):
owner=owner.namespace
if(owner==None):
return self.currentElement() ##
#checks wether the project belongs to the manager
if(self.projects().has_key(owner.name)):
self.focusOnProject(self.projects()[owner.name])
self._currentElements[owner.name]=object
return self.currentElement()
#else returns the previous current element
else:
return self.currentElement() ##
#else (if parameter type invalid) returns the previous current element
else:
return self.currentElement() ##
def addUnittestDependency(self, package):
"""
Adds 'unittest' depency to given package (or model)
- not created if it allready exists or parameter if not of correct type.
Does not change the focus
"""
if not self.currentProject():
return
if not isinstance(package,metamodel.Package):
return
if isinstance(package,metamodel.Model) and not self._projects.has_key(package.name):
return
dep=None
f=0
for d in package.clientDependency:
for s in d.supplier:
if s==self._unittestPackage[self.currentProject()]:
f=1
if not f:
name=mkUnittestDependencyName(package.name)
name=self.createUniqueElementName(self.currentProject(),name)
dep=self._layerManager.newDependency(self._unittestPackage[self.currentProject()],package,name)
return dep
def newClass(self, newName=None):# - adding to current element, if it is a project or package
if not newName:
newName=self.createUniqueElementName(self.currentElement(),"class")
createdClass=self._layerManager.newClass(self.currentElement(),newName)
if createdClass:
testClass=self._layerManager.getTestClient(createdClass)
gen=self.newGeneralization(self._testCaseClass[self.currentProject()],testClass)
if not gen:
raise 'Could not create the test generalization'
self.focusOnElement(createdClass)
return createdClass
def newInterface(self,newName=None):#- adding to current element, if it is a project or package
if not newName:
newName=self.createUniqueElementName(self.currentElement(),"interface")
createdInterface=self._layerManager.newInterface(self.currentElement(),newName)
self.focusOnElement(createdInterface)
return createdInterface
def newGeneralization(self,parent,child,newName=None):#tested, adding to closest common owner, class or interface
if not newName:
newName=self.createUniqueElementName(self.currentElement(),"generalization")
createdGeneralization=self._layerManager.newGeneralization(parent,child,newName)
self.focusOnElement(createdGeneralization)
return createdGeneralization
def newAssociation(self,end1,end2,newName=None):# - adding to the closest common namespace,project or package.
if not newName:
newName=self.createUniqueElementName(self.currentElement(),"association")
createdAssociation=self._layerManager.newAssociation(end1,end2,newName)
self.focusOnElement(createdAssociation)
return createdAssociation
def newDependency(self,supplier,client,newName=None):# - adding to closest namespace, project or package
if not newName:
newName=self.createUniqueElementName(self.currentElement(),"dependency")
createdDependency=self._layerManager.newDependency(supplier,client,newName)
self.focusOnElement(createdDependency)
return createdDependency
def newPackage(self,newName=None):# - adding to current element, if it is project or package
if newName==self.currentProject().name:
return
if not newName:
newName=self.createUniqueElementName(self.currentElement(),"package")
createdPackage=self._layerManager.newPackage(self.currentElement(),newName)
self.focusOnElement(createdPackage)
self.addUnittestDependency(createdPackage)
return createdPackage
def newMethod(self,newName=None, specification=None):# tested adding to currentElement and to the testClass
if not newName:
newName=self.createUniqueElementName(self.currentElement(),"method")
createdMethod=self._layerManager.newMethod(self.currentElement(),newName,specification)
self.focusOnElement(createdMethod)
return createdMethod
def newOperation(self,newName=None): # tested
if not newName:
newName=self.createUniqueElementName(self.currentElement(),"operation")
createdOperation=self._layerManager.newOperation(self.currentElement(),newName)
self.focusOnElement(createdOperation)
return createdOperation
def newAttribute(self,newName=None):#tested-working - adding to currentElement
if not newName:
newName=self.createUniqueElementName(self.currentElement(),"attribute")
createdAttribute=self._layerManager.newAttribute(self.currentElement(),newName)
self.focusOnElement(createdAttribute)
return createdAttribute
## def deleteElement1(self,element=None): #leaves the relationships hanging
## if (element==None):
## element=self.currentElement()
## if not isinstance(element,metamodel.ModelElement):
## return None
## if(self._layerManager.returnElements(element).count(element)>0):
## if(isinstance(element,metamodel.Attribute) or isinstance(element,metamodel.Method) or isinstance(element,metamodel.Operation)):
## if(element.namespace!=None):
## self.focusOnElement(element.namespace)
## elif(element.owner!=None):
## self.focusOnElement(element.owner)
## # elif(isinstance(element,metamodel.Method)):
## # self.focusOnElement(element.owner)
## else:
## self.focusOnElement(element.namespace)
## deletedElement=self._layerManager.deleteElement1(element)
## return deletedElement
def deleteElement2(self,element=None): #deletes the relationships too
""" Deletes an element and all its relationships """
if (element==None):
element=self.currentElement()
if not isinstance(element,metamodel.ModelElement):
return None
if(self._layerManager.returnElements(element).count(element)>0):
if(isinstance(element,metamodel.Attribute) or isinstance(element,metamodel.Method) or isinstance(element,metamodel.Operation)):
if(element.namespace!=None):
self.focusOnElement(element.namespace)
elif(element.owner!=None):
self.focusOnElement(element.owner)
#elif(isinstance(element,metamodel.Method)):
# self.focusOnElement(element.owner)
else:
self.focusOnElement(element.namespace)
removedependency=0
p=None
deletedElement=self._layerManager.deleteElement2(element)
return deletedElement
def renameElement(self, element, newName):#tested-working
"""
Renames the element to 'newName'
and returns the new name of the element.
Returns none if either one of the parameters is invalid.
"""
if isinstance(element,metamodel.Package):
if newName==self.currentProject().name:
return
ns=element
if isinstance(element,metamodel.Feature) and element.owner:
ns=element.owner
while not ns==self.currentProject():
if ns==self.pythonPackage():
return
ns=ns.namespace
changedName=self._layerManager.renameElement(element,newName)
return changedName
def createUniqueElementName(self,element,defName=None):
"""
Create a unique name for element and returns it
"""
if not defName:
defName="element"
if not isinstance(defName,str):
return None
if not(isinstance(element,metamodel.ModelElement)):
return None
return self.layerManager().createUniqueElementName(element,defName)
--- NEW FILE: __init__.py ---
from SfiManager import *
from LayerManager import *
--- NEW FILE: python.iml ---
(ismw.metamodel.UML14
Model
p1
(dp2
S'isAbstract'
p3
I0
sS'isSpecification'
p4
I0
sS'__uniqueID__'
p5
S'ib351d2ec95de35465f82789cf7689fa7'
p6
sS'isRoot'
p7
I0
sS'visibility'
p8
[...227897 lines suppressed...]
p49406
sg54
S''
sbsg4
I0
sg5
S'iaf81dd77ae2741edd072fd3d40fe0e99'
p49407
sg56
I0
sg8
I0
sg10
S'_normpath'
p49408
sg17
g48793
sg58
I0
sbasbsbasbsbasbsb.
|
|
From: <de...@us...> - 2004-01-07 01:48:33
|
Update of /cvsroot/pymerase/smw/smw/scw/Project
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/scw/Project
Added Files:
SfiManager.py __init__.py python.iml
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: SfiManager.py ---
#!/usr/bin/env python2
"""
The Project layer is the fisrt layer in the SCW project. It can create and delete a project.
Rename and load/save projects.
"""
__layer__ = 'Project'
from smw.metamodel import UML14 as metamodel
from smw.transform.uml2py.uml2py import isNameValid
from smw import io
import os.path
import sys
import smw.Configuration
class SfiManager:
# N = 0
def __init__(self):
"""
Constructor for a new SfiManager.
"""
# self.__class__.N += 1
# if self.__class__.N > 1:
# raise 'More than one instance exists.'
# self.setUp()
config=smw.Configuration.Configuration()
ppObj=config.getParameter("install_path")
pp=ppObj.currentValue
if os.path.isfile(pp+"/scw/python.iml"):
#pythonUMLModel=io.loadModel(pp+"/smw/scw/python.iml")
#self._pythonUMLPackage=pythonUMLModel.ownedElement[0]
self.setUp()
else:
print "You must run the 'smw/scw/make' in command first"
sys.exit()
def pythonPackage(self):
"""returns the python package"""
return self._pythonUMLPackage
def projects(self):
"""returns a dictonary containing the project (more use when the editor
supports several projects)"""
return self._projects
def setUp(self):
"""just clears the attributes,used when starting a new project"""
self._projects={}
self._currentProject=None
self._pythonUMLPackage=None
def __del__(self):
print 'instance of %s.SfiManager deleted' % __layer__
def newProject(self, projectName = None):
"""
Adds a new project to the 'projects' -dictionary. The new project is assigned as current project.
Returns the new Project.
"""
if not projectName:
projectName = self.createUniqueName()
if not isinstance(projectName, str):
return
if len(self._projects)!=0:
return
if isNameValid(projectName):
if self._projects.has_key(projectName):
return
self._projects[projectName] = metamodel.Model()
self._projects[projectName].name=projectName
self._currentProject=self._projects[projectName]
config=smw.Configuration.Configuration()
ppObj=config.getParameter("install_path")
pp=ppObj.currentValue
pythonUMLModel=io.loadModel(pp+"/scw/python.iml")
self._pythonUMLPackage=pythonUMLModel.ownedElement[0]
self._pythonUMLPackage.name="python2_2"
# THIS HAS TO BE CHANGED
self._currentProject.ownedElement.append(self._pythonUMLPackage)
return self._projects[projectName]
else:
return
def createUniqueName(self):
"""
Creates a unique name for a project and returns it.
"""
defName = "Project"
x = 1
while self._projects.has_key(defName + str(x)):
x = x + 1
return defName + str(x)
def deleteProject(self, arg):
"""
Deletes the specified project from the dictionary if it exists.
-arg can be either the name of the project or the project itself
Returns the deleted project.
"""
if isinstance(arg,str):
if not self._projects.has_key(arg):
return None
else:
uModel = self._projects[arg]
del self._projects[arg]
elif isinstance(arg,metamodel.Model):
if not self._projects.has_key(arg.name):
return None
else:
uModel=arg
del self._projects[arg.name]
# if needed to delete project (Current) without arguments add it here
else:
return
if len(self._projects.keys())<1:
self._currentProject=None
else:
firstKey=(self._projects.keys())[0]
self.focusOnProject(firstKey)
return uModel
def renameProject(self, oldName, newName):
"""
Renames the project with the name 'oldName' to 'newName'
and returns the new name of the project.
Returns none if either one of the parameters is invalid.
"""
if isNameValid(newName):
if not self._projects.has_key(oldName):
return
elif self._projects.has_key(newName):
return
else:
value=self._projects[oldName]
del self._projects[oldName]
self._projects[newName]=value
self._projects[newName].name=newName
return newName
else:
return
def currentProject(self):
"""
Returns the current project.
"""
return self._currentProject
def focusOnProject(self,project):
"""
Assigns the project given as parameter to current project and
returns the current project if the parameter is an existing project.
"""
if isinstance(project,str):
if self._projects.has_key(project):
self._currentProject=self._projects[project]
# THIS HAS TO BE CHANGED!!!!!!!!!
#self.pythonPackage().namespace=self.currentProject
return self.currentProject()
else:
return
elif isinstance(project,metamodel.Model):
if self._projects.has_key(project.name):
self._currentProject=project
# THIS HAS TO BE CHANGED!!!!!!!!!!!!!!!!!
#self.pythonPackage().namespace=self.currentProject
return self.currentProject()
else:
return
else:
return
def loadProject(self, fname):
"""
Loads the project from the file named 'fname'.
After loading the current element is the project itself.
Returns the loaded project if the loading succeeded
"""
if self.currentProject():
self._projects={}
if not isinstance(fname, str):
return
if not os.path.isfile(fname):
return
uModel = io.loadModel(fname)
# model was loaded and the name does not exist in the dictionary.
if uModel and not self._projects.has_key(uModel.name):
self._projects[uModel.name] = uModel
self._currentProject = uModel
foundPP=0
for x in range(len(uModel.ownedElement)):
e=uModel.ownedElement[x]
if (e.oclIsKindOf(metamodel.Package) and e.name=="python2_2"):
foundPP=1
if not foundPP:
config=smw.Configuration.Configuration()
ppObj=config.getParameter("install_path")
pp=ppObj.currentValue
pythonUMLModel=io.loadModel(pp+"/scw/python.iml")
self._pythonUMLPackage=pythonUMLModel.ownedElement[0]
self._pythonUMLPackage.name="python2_2"
self._currentProject.ownedElement.append(self._pythonUMLPackage)
return uModel
return
def saveProject(self):
"""
saves the currentProject and returns the name.
"""
if not self.currentProject():
return
fname = self.currentProject().name + ".iml"
savedModel=io.saveModel(fname, self.currentProject())
if savedModel:
return self.currentProject().name
else:
print "Saving unsuccesful!"
return
def saveProjectAs(self, fname):
"""
Saves the project with the given name and returns the name.
"""
if not self.currentProject():
return
savedModel=io.saveModel(fname, self.currentProject())
if savedModel:
return fname[0:len(fname)-4]
else:
print "Saving unsuccesfull!"
return
--- NEW FILE: __init__.py ---
from SfiManager import *
--- NEW FILE: python.iml ---
(ismw.metamodel.UML14
Model
p1
(dp2
S'isAbstract'
p3
I0
sS'isSpecification'
p4
I0
sS'__uniqueID__'
p5
S'i3af6dbe0141dc49e413e120e4051be18'
p6
sS'isRoot'
p7
I0
sS'visibility'
p8
[...27200 lines suppressed...]
I0
sg5
S'if1f5e220f72663332016cb25e518e381'
p4846
sg17
g4825
sg41
I0
sg4
I0
sg7
I0
sg8
I0
sg10
S'PyZipFile'
p4847
sg9
I0
sbasbsbasbsbasbsb.
|
|
From: <de...@us...> - 2004-01-07 01:48:33
|
Update of /cvsroot/pymerase/smw/smw/scw/UndoRedo
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/scw/UndoRedo
Added Files:
LayerManager.py SfiManager.py __init__.py python.iml
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: LayerManager.py ---
#!/usr/bin/env python2
__layer__ = 'UndoRedo'
import unittest
from smw.scw.Correctness import LayerManager as CorrectnessLayerManager
class LayerManager(CorrectnessLayerManager):
pass
--- NEW FILE: SfiManager.py ---
#!/usr/bin/env python2
__layer__ = 'UndoRedo'
"""This layer implements undo/redo operation;
all modifications of UML model made by LayerManager are expected to follow
well-formed rules
"""
from smw.metamodel.UML14 import *
from smw.Project import *
from LayerManager import LayerManager
from smw.scw.Correctness import SfiManager as CorrectnessSfiManager
class SfiManager(CorrectnessSfiManager):
def __init__(self,hist=None):
"""
Constructor for a new SfiManager.
"""
CorrectnessSfiManager.__init__(self)
self.__hist=None
self.__called=0
if hist:
self.__hist=hist
self.__called=1
else:
self.__proj = Project()
self.__hist=self.__proj.history
# self.__proj.setRoot(self.pythonPackage())
def setUp(self):
CorrectnessSfiManager.setUp(self)
self._layerManager=LayerManager()
def project(self):
return self.__proj
def history(self):
return self.__hist
def newProject(self, projectName = None):
project=CorrectnessSfiManager.newProject(self,projectName)
if project and not self.__called:
self.__proj.setRoot(project)
return project
def focusOnProject(self,project):
"""
Assigns the project given as parameter to current project and
returns the current project if the parameter is an existing project.
"""
rv=CorrectnessSfiManager.focusOnProject(self,project)
if (rv) and not self.__called:
self.__proj.setRoot(rv)
return rv
def newLayer(self,anc=None,succ=None,lname=None):
inModifyCmd=self.__hist.inModifyCmd
if not inModifyCmd:
self.__hist.beginStrictTransaction()
createdLayer=CorrectnessSfiManager.newLayer(self,anc,succ,lname)
#try:
if not inModifyCmd:
self.__hist.endTransaction()
#except WFRException, e:
# print 'WFR exception, undo impossible:\n%s' % e
return createdLayer
def newClass(self, newName=None):#tested - working - adding to current element, if it is a project or package
inModifyCmd=self.__hist.inModifyCmd
if not inModifyCmd:
self.__hist.beginStrictTransaction()
createdClass=CorrectnessSfiManager.newClass(self,newName)
#try:
if not inModifyCmd:
self.__hist.endTransaction()
#except WFRException, e:
# print 'WFR exception, undo impossible:\n%s' % e
return createdClass
def newInterface(self,newName=None):#tested-working - adding to current element, if it is a project or package
inModifyCmd=self.__hist.inModifyCmd
if not inModifyCmd:
self.__hist.beginStrictTransaction()
createdInterface=CorrectnessSfiManager.newInterface(self, newName)
#try:
if not inModifyCmd:
self.__hist.endTransaction()
#except WFRException, e:
# print 'WFR exception, undo impossible:\n%s' % e
return createdInterface
def newGeneralization(self,parent,child,newName=None):#tested -working, adding to closest common owner, class or interface
inModifyCmd=self.__hist.inModifyCmd
if not inModifyCmd:
self.__hist.beginStrictTransaction()
createdGeneralization=CorrectnessSfiManager.newGeneralization(self,parent,child,newName)
#try:
if not inModifyCmd:
self.__hist.endTransaction()
#except WFRException, e:
# print 'WFR exception, undo impossible:\n%s' % e
return createdGeneralization
def newAssociation(self,end1,end2,newName=None):#tested-working - adding to the closest common namespace,project or package.
inModifyCmd=self.__hist.inModifyCmd
if not inModifyCmd:
self.__hist.beginStrictTransaction()
createdAssociation=CorrectnessSfiManager.newAssociation(self,end1,end2,newName)
#try:
if not inModifyCmd:
self.__hist.endTransaction()
#except WFRException, e:
# print 'WFR exception, undo impossible:\n%s' % e
return createdAssociation
def newDependency(self,supplier,client,newName=None):#tested-working - adding to closest namespace, project or package
inModifyCmd=self.__hist.inModifyCmd
if not inModifyCmd:
self.__hist.beginStrictTransaction()
createdDependency=CorrectnessSfiManager.newDependency(self,supplier,client,newName)
#try:
if not inModifyCmd:
self.__hist.endTransaction()
#except WFRException, e:
# print 'WFR exception, undo impossible:\n%s' % e
return createdDependency
def newPackage(self,newName=None):#tested-working - adding to current element, if it is project or package
inModifyCmd=self.__hist.inModifyCmd
if not inModifyCmd:
self.__hist.beginStrictTransaction()
createdPackage=CorrectnessSfiManager.newPackage(self,newName)
#try:
if not inModifyCmd:
self.__hist.endTransaction()
#except WFRException, e:
# print 'WFR exception, undo impossible:\n%s' % e
return createdPackage
def newMethod(self,newName=None,specification=None):#tested-working - adding to currentElement and to the testClass
inModifyCmd=self.__hist.inModifyCmd
if not inModifyCmd:
self.__hist.beginStrictTransaction()
createdMethod=CorrectnessSfiManager.newMethod(self,newName,specification)
#try:
if not inModifyCmd:
self.__hist.endTransaction()
#except WFRException, e:
# print 'WFR exception, undo impossible:\n%s' % e
return createdMethod
def newOperation(self,newName=None):
inModifyCmd=self.__hist.inModifyCmd
if not inModifyCmd:
self.__hist.beginStrictTransaction()
createdOperation=CorrectnessSfiManager.newOperation(self,newName)
#try:
if not inModifyCmd:
self.__hist.endTransaction()
#except WFRException, e:
# print 'WFR exception, undo impossible:\n%s' % e
return createdOperation
def newAttribute(self,newName=None):#tested-working - adding to currentElement
inModifyCmd=self.__hist.inModifyCmd
if not inModifyCmd:
self.__hist.beginStrictTransaction()
createdAttribute=CorrectnessSfiManager.newAttribute(self,newName)
#try:
if not inModifyCmd:
self.__hist.endTransaction()
#except WFRException, e:
# print 'WFR exception, undo impossible:\n%s' % e
return createdAttribute
## def deleteElement1(self,element=None): #leaves the relationships hanging
## self.__proj.history.beginStrictTransaction()
## deletedElement=CorrectnessSfiManager.deleteElement1(self,element)
## #try:
## self.__proj.history.endTransaction()
## #except WFRException, e:
## # print 'WFR exception, undo impossible:\n%s' % e
## return deletedElement
def deleteElement2(self,element=None): #deletes the relationships too
inModifyCmd=self.__hist.inModifyCmd
if not inModifyCmd:
self.__hist.beginStrictTransaction()
deletedElement=CorrectnessSfiManager.deleteElement2(self,element)
#try:
if not inModifyCmd:
self.__hist.endTransaction()
#except WFRException, e:
# print 'WFR exception, undo impossible:\n%s' % e
return deletedElement
def renameElement(self, element, newName):#tested-working
"""
Renames the element to 'newName'
and returns the new name of the element.
Returns none if either one of the parameters is invalid.
"""
inModifyCmd=self.__hist.inModifyCmd
if not inModifyCmd:
self.__hist.beginStrictTransaction()
# sends the currentElement as parameter so that layerManager knows the current project
changedName=CorrectnessSfiManager.renameElement(self,element,newName)
#try:
if not inModifyCmd:
self.__hist.endTransaction()
#except WFRException, e:
# print 'WFR exception, undo impossible:\n%s' % e
return changedName
def undo(self):
"""
Undoes the previous operation done in layermanager.
-Current element reference is focused directly to the model.
"""
self.__hist.undo()
self.focusOnElement(self.currentProject())
def redo(self):
"""
Redoes the previous undone operation.
-Current element reference stays in the model regardeless the opertaion redo does.
"""
self.__hist.redo()
--- NEW FILE: __init__.py ---
from SfiManager import *
from LayerManager import *
--- NEW FILE: python.iml ---
(ismw.metamodel.UML14
Model
p1
(dp2
S'isAbstract'
p3
I0
sS'isSpecification'
p4
I0
sS'__uniqueID__'
p5
S'ib351d2ec95de35465f82789cf7689fa7'
p6
sS'isRoot'
p7
I0
sS'visibility'
p8
[...227897 lines suppressed...]
p49406
sg54
S''
sbsg4
I0
sg5
S'iaf81dd77ae2741edd072fd3d40fe0e99'
p49407
sg56
I0
sg8
I0
sg10
S'_normpath'
p49408
sg17
g48793
sg58
I0
sbasbsbasbsbasbsb.
|
|
From: <de...@us...> - 2004-01-07 01:48:33
|
Update of /cvsroot/pymerase/smw/smw/scw/CodeGen
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/scw/CodeGen
Added Files:
LayerManager.py SfiManager.py __init__.py python.iml
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: LayerManager.py ---
#!/usr/bin/env python2
__layer__ = 'CodeGen'
import unittest
from smw.scw.UndoRedo import LayerManager as UndoRedoLayerManager
class LayerManager(UndoRedoLayerManager):
pass
--- NEW FILE: SfiManager.py ---
#!/usr/bin/env python2
__layer__ = 'CodeGen'
from smw.metamodel import UML14 as metamodel
import unittest
import string
from LayerManager import LayerManager
from smw.transform.uml2py.uml2py import *
import os.path
import os
import sys
import popen2
from smw.metamodel.MetaMM import *
from smw.transform.modeltransformer import *
import tempfile
import time
from smw.scw.UndoRedo.SfiManager import SfiManager as UndoRedoSfiManager
class SfiManager(UndoRedoSfiManager):
def setUp(self):
UndoRedoSfiManager.setUp(self)
self._layerManager=LayerManager()
self.__codePaths={}
self.__returnCode="--**##\"\"#.-"
self.__tmpPath=None
self.__pythonIn='python2'
self.usedTmpPath=None
self.codeGenTimestamp={}
self.applicationTimestamp=0
self.methods=0
self.bidirect=0
self.pyth=1
self.methodPadding=1
self.classPadding=1
self.path=''
def returnCode(self):
return self.__returnCode
def deleteProject(self,name):
proj=UndoRedoSfiManager.deleteProject(self,name)
if proj:
if (self.__codePaths.has_key(proj)):
del self.__codePaths[proj]
if self.usedTmpPath:
if os.path.isdir(self.usedTmpPath):
popen2.popen2("rm -r "+self.usedTmpPath)
if self.codeGenTimestamp.has_key(proj.name):
del self.codeGenTimestamp[proj.name]
return proj
else:
return
def generateCode(self, path = None, bidirect=None,
pyth=None, methodPadding=None,
classPadding=None):
"""
Turns the currentProject UML model into .py files.
If path is not given, we will use the current working directory
If operation was succesful, the project object is returned, else None.
This operation also changes the timestamp of this file.
"""
if path==None:
path=self.path
if bidirect==None:
bidirect=self.bidirect
if pyth==None:
pyth=self.pyth
if methodPadding==None:
methodPadding=self.methodPadding
if classPadding==None:
classPadding=self.classPadding
if not self.currentProject():
ret="""
Congrats: you managed to do something that the creators of
this software didn't foresee. Please contact the developers
of the SFI editor.
"""
print ret
return ret
if path and ((os.path.isdir(path)) and not os.access(path,os.W_OK)):
print os.path.isdir(path)
ret="""
Current path in options is not valid: you don't have the
rights to modify the specified directory.
"""
print ret
return ret
if path and os.path.isfile(path):
ret="""
Current path in options is not valid: the specified path name
is already used by a normal file.
"""
print ret
return ret
eles=self._layerManager.returnElements(self.currentProject())
pnames=[]
for e in eles:
if e.oclIsKindOf(metamodel.Package) and not e.oclIsKindOf(metamodel.Model):
pnames.append(e.name)
if self.currentProject().name in pnames:
ret="""
At least one of the packages has the same name as the project.
Try to rename either the package or the project.
"""
print ret
return ret
e=None
try:
e=self.currentProject().isWellFormedRecursive()
except Exception,detail:
print detail
return detail
modifiedElements = []
modifiedPackages = {}
if self.codeGenTimestamp[self.currentProject().name]:
ts_flg = 0
for e in eles:
# check if there is later modified elements
# that has newer timestamp than codegentimestamp is
if self.codeGenTimestamp[self.currentProject().name] < e.__timestamp__:
ts_flg = 1
modifiedElements.append(e)
# add modified packages to the list
if e.oclIsKindOf(metamodel.Classifier):
modifiedPackages[e.namespace]=''
if e.oclIsKindOf(metamodel.Feature):
modifiedPackages[e.owner.namespace]=''
if e.oclIsKindOf(metamodel.Package):
modifiedPackages[e]=''
if not ts_flg:
ret = """
No need for code generation:
Current project has not been modified after
last code generation.
"""
print ret
return ret
elif not self.codeGenTimestamp[self.currentProject().name]:
modifiedPackages[self.currentProject()]=''
# remove such packages that are inside other packages that are generated
for pack in modifiedPackages.keys():
ns=pack
while not ns.oclIsKindOf(metamodel.Model):
ns=ns.namespace
if ns in modifiedPackages.keys():
if modifiedPackages.has_key(pack):
del modifiedPackages[pack]
break
modifiedPackages[pack]=ns.name+'/'+modifiedPackages[pack]
###
## savename = "gc"
## x = 1
## while (os.path.isfile(savename + str(x) + ".iml")): # create unique file name
## x = x+1
## savename = savename + str(x)+".iml"
## check=self.saveProjectAs(savename)
## if (check == None): # something went wrong.
## return None
#argv = ["python", "uml2py.py", "--input",savename, "--output", "."]
#runner=cmdlinemtr.CmdLineMTRunner(UML2Py(),argv[1:])
## possibleError = runner.doit()
## if (possibleError == -1):
## return None
## try:
## os.remove(savename) # remove the tmp file
## except: # Makes sure that the program wont crash if the file is in use for some reason.:
## pass
if pyth:
self.__pythonIn='python2'
else:
self.__pythonIn='python1.5'
if not path:
#if not self.__tmpPath:
self.__tmpPath=tempfile.mktemp()
self.usedTmpPath=self.__tmpPath
#else:
#popen2.popen2("rm -r "+self.__tmpPath)
#FIXME
#pass
else:
self.__tmpPath=path
sys.path.append(self.__tmpPath)
u2p=UML2Py()
u2p.bidirectAssoc=bidirect
u2p.methodPadding=methodPadding
u2p.classPadding=classPadding
u2p.model=self.currentProject()
u2p.metamodel=MetaMM.getMetamodelByName(u2p.model.__module__)
if bidirect:
c=PythonCodeArtifact(self.__tmpPath+'/'+self.currentProject().name+'/'+UML2Py._UMLClassModule)
c.addText(UML2Py._umlcoresupport(u2p))
c.save()
for pack in modifiedPackages:
sys.__stdout__.write(pack.name)
code=UML2Py.processPackage(u2p,pack,self.__tmpPath+'/'+modifiedPackages[pack])
if code:
code.save()
self.__codePaths[self.currentProject()]=self.__tmpPath+"/"
self.codeGenTimestamp[self.currentProject().name] = time.time()
return self.currentProject() # return the project if operation was succesfull
def isCodeGenerated(self):
eles=self._layerManager.returnElements(self.currentProject())
for e in eles:
if self.codeGenTimestamp[self.currentProject().name] < e.__timestamp__:
return 0
return 1
def renameElement(self,element,newName):
self.history().beginStrictTransaction()
changedName=UndoRedoSfiManager.renameElement(self,element,newName)
app=element.taggedValue.select(lambda x:x.name=="application")
if changedName and len(app)==1:
self.setApplication(element)
self.history().endTransaction()
def setApplication(self,applicationClass,parameters=""):
if(not self.currentProject()):
return
elements=self._layerManager.returnElements(self.currentProject())
if (applicationClass in elements):
for x in elements:
if(isinstance(x,metamodel.Class)):
for y in x.taggedValue.select(lambda z: z.name=="application"):
self._layerManager.detachTag(y)
instRow=parameters
ns=applicationClass.namespace
p=ns.name
while not ns==self.currentProject():
ns=ns.namespace
p=ns.name+'.'+p
stri="#!/usr/bin/env "+self.__pythonIn+' '+self.__returnCode+"from "+p+" import "+applicationClass.name+self.__returnCode+instRow
self._layerManager.attachTag(applicationClass,"application",stri)
return applicationClass
def execute(self,qprocess=None):
#chekkaa onko koodi generoitu....
if(self.__codePaths.has_key(self.currentProject())):
#Mitä tehdään?...pitäisi nostaa dialogi
#return None
# Avataan samassa hakemistossa kuin minne itse koodi generoidaan
path=self.__codePaths[self.currentProject()]
elements=self._layerManager.returnElements(self.currentProject())
applicationTagValue=None
applicationTag=None
for x in elements:
if isinstance(x,metamodel.Class):
for y in x.taggedValue.select(lambda z: z.name=="application"):
applicationTagValue=y.dataValue
applicationTag=y
if not applicationTag:
return
if applicationTag.__timestamp__>self.applicationTimestamp:
# pitäisi tietää minne directoryyn pistetään
runFile=open(self.__tmpPath+"/runme.py","w")
tagValues=string.split(applicationTagValue,self.__returnCode)
for i in tagValues:
runFile.write(i+"\n")
runFile.close()
self.applicationTimestamp=applicationTag.__timestamp__
# runs the program
if qprocess:
qprocess.addArgument(self.__pythonIn)
qprocess.addArgument(self.__tmpPath+"/runme.py")
qprocess.start()
return
else:
# [out,y,err]=popen2.popen3(os.spawnlp(os.P_NOWAIT,"python","",self.__tmpPath+"/runme.py"))
[out,y,err]=popen2.popen3(self.__pythonIn+' '+self.__tmpPath+"/runme.py")
errors=0
res=""
while 1:
t=err.readline()
if (t==""):
break
res=res+t
errors=1
if not errors:
while 1:
s=out.readline()
if (s==""):
break
res=res+s
print res
return res
def runTest(self,testCaseClass,qprocess=None):
print "calling runTest"
if not self.__codePaths.has_key(self.currentProject()):
return
if not testCaseClass or testCaseClass==[]:
return
ok=1
for x in testCaseClass:
if not(x in self._layerManager.returnElements(self.currentProject())):
ok=0
if ok:
path=self.__codePaths[self.currentProject()]
runFile=open(self.__tmpPath+"/runTest.py","w")
runFile.write("#!/usr/lib/env "+self.__pythonIn+"\n")
runFile.write("import unittest\n")
for x in testCaseClass:
importFlag=0
inheritFlag=0
ownerElement=x.namespace
for y in ownerElement.clientDependency.select(lambda z: z.supplier[0].name=="unittest"):
importFlag=1
break
if importFlag:
packChain=""
iterator=x
while 1:
if(iterator.namespace==None):
if packChain[-1]==".":
packChain=packChain[:-1]
break
else:
packChain=iterator.namespace.name+"."+packChain
iterator=iterator.namespace
runFile.write("from "+packChain+" import "+x.name+"\n\n")
runFile.write("unittest.main()\n")
runFile.close()
if qprocess:
qprocess.addArgument(self.__pythonIn)
qprocess.addArgument(self.__tmpPath+"/runTest.py")
qprocess.start()
return
else:
if 1:
[o1,y1,result]=popen2.popen3(self.__pythonIn+' '+self.__tmpPath+"/runTest.py")
errors=0
ticker=0
counter=0
res=""
while 1:
t = o1.readline()
if (t==""):
break
res=res+t
while 1:
t=result.readline()
if (t==""):
break
if ticker:
counter+=1
if (string.find(t,"ImportError")>=0):
errors=1
if (string.find(t,"SyntaxError")>=0):
errors=1
if (string.find(t,"Ran ")==0 and string.find(t," tests in ")>0):
ticker=1
if counter==2:
if string.find(t,"FAILED")==0:
errors=1
res=res+t
# popen2.popen2("rm runTest.py")
text=""
# update the correctness tag in class
if errors==0:
text="test passed"
print text
for x in testCaseClass:
cl=self.layerManager().getTestSupplier(x)
self.updateModelTags(cl,0)
else:
text="test failed"
print text
for x in testCaseClass:
cl=self.layerManager().getTestSupplier(x)
self.updateModelTags(cl,1)
for x in testCaseClass:
clas=self._layerManager.getTestSupplier(x)
if clas:
for x in clas.taggedValue.select(lambda z: z.name=="correctness"):
x.dataValue=text
print res
return res
def checkForErrors(self,message,element):
mes=string.split(message,"\n")
errors=0
ticker=0
counter=0
for z in mes:
t=z
if ticker:
counter+=1
if (string.find(t,"NameError")>=0):
errors=1
if (string.find(t,"FAILED (")>0):
errors=1
if (string.find(t,"ImportError")>=0):
errors=1
if (string.find(t,"SyntaxError")>=0):
errors=1
if (string.find(t,"ERROR")>=0):
errors=1
if (string.find(t,"Ran ")==0 and string.find(t," tests in ")>0):
ticker=1
if counter==2:
if string.find(t,"FAILED")==0:
errors=1
text=""
pText=""
if errors==0:
text="test passed"
pText="all tests passed"
self.updateModelTags(element,0)
else:
text="test failed"
pText="some tests failed"
self.updateModelTags(element,1)
if isinstance(element,metamodel.Class):
for x in element.taggedValue.select(lambda z: z.name=="correctness"):
x.dataValue=text
return
else:
for x in element.taggedValue.select(lambda z: z.name=="correctness" ):
x.dataValue=pText
eles=self.layerManager().recursiveElements(element)
for x in eles:
for y in x.taggedValue.select(lambda z: z.name=="correctness" ):
if isinstance(element,metamodel.Class):
y.dataValue=text
elif isinstance(element,metamodel.Package):
y.dataValue=pText
def runAllTestsInPackage(self,p,qprocess=None):
elemList=self._layerManager.recursiveElements(p)
result=""
els=[]
for el in elemList:
if isinstance(el,metamodel.Class) and not self.layerManager().isTestClass(el):
els.append(self.layerManager().getTestClient(el))
if els:
some=self.runTest(els,qprocess)
result=some
return result
def runAllTests(self,qprocess=None):
elementList=self._layerManager.returnElements(self.currentProject())
result=''
els=[]
for el in elementList:
for tag in el.taggedValue.select(lambda z: z.name=="testcase"):
els.append(el)
if els:
some=self.runTest(els,qprocess)
result=some
return result
def updateModelTags(self,Class,failed):
# eli jos failasi
if not Class:
return
ele=Class
if failed:
running=1
while ele.namespace and running:
if ele.namespace.oclIsKindOf(metamodel.Model):
for x in ele.namespace.taggedValue.select(lambda z: z.name=="correctness"):
x.dataValue="some tests failed"
running=0
else:
for x in ele.namespace.taggedValue.select(lambda z: z.name=="correctness" ):
x.dataValue="some tests failed"
ele=ele.namespace
else:
undef=0
correct=1
while ele.namespace and correct:
ele=ele.namespace
for x in ele.ownedElement:
if x!=Class:
for y in x.taggedValue.select(lambda z: z.name=="correctness"):
if y.dataValue=="some tests failed" or y.dataValue=="test failed":
correct=0
if y.dataValue=="undefined":
undef=1
if correct:
if not undef:
for x in ele.taggedValue.select(lambda z: z.name=="correctness"):
x.dataValue="all tests passed"
else:
for x in ele.taggedValue.select(lambda z: z.name=="correctness" ):
x.dataValue="undefined"
def newProject(self, projectName = None):
p=UndoRedoSfiManager.newProject(self,projectName)
if p:
self.codeGenTimestamp[p.name]=0
return p
def loadProject(self, fname):
p=UndoRedoSfiManager.loadProject(self, fname)
if p:
self.codeGenTimestamp[p.name]=0
return p
def renameProject(self, oldName, newName):
p=UndoRedoSfiManager.renameProject(self,oldName, newName)
if p:
self.codeGenTimestamp[p]=self.codeGenTimestamp[oldName]
del self.codeGenTimestamp[oldName]
return p
def updateCorrectnessTag(self):
fail=0
undef=0
cl=[]
el=self._layerManager.returnElements(self.currentProject())
for i in el:
if isinstance(i,metamodel.Classifier):
ns=i.namespace
inpp=None
while not ns==self.currentProject():
if ns.name=='python2_2':
inpp=1
ns=self.currentProject()
else:
ns=ns.namespace
if not inpp:
if isinstance(i,metamodel.Class) and not self._layerManager.isTestClass(i):
cl.append(i)
for c in cl:
ns=c.namespace
while ns:
fail=0
undef=0
for x in ns.ownedElement:
for y in x.taggedValue.select(lambda z: z.name=="correctness" ):
if y.dataValue=="some tests failed" or y.dataValue=="test failed":
fail=1
if not fail:
for y in x.taggedValue.select(lambda z: z.name=="correctness"):
if y.dataValue=="undefined":
undef=1
for t in ns.taggedValue.select(lambda z: z.name=="correctness"):
if undef and not fail:
t.dataValue="undefined"
elif fail:
t.dataValue="some tests failed"
else:
t.dataValue="all tests passed"
ns=ns.namespace
--- NEW FILE: __init__.py ---
from SfiManager import *
from LayerManager import *
--- NEW FILE: python.iml ---
(ismw.metamodel.UML14
Model
p1
(dp2
S'isAbstract'
p3
I0
sS'isSpecification'
p4
I0
sS'__uniqueID__'
p5
S'i3af6dbe0141dc49e413e120e4051be18'
p6
sS'isRoot'
p7
I0
sS'visibility'
p8
[...27200 lines suppressed...]
I0
sg5
S'if1f5e220f72663332016cb25e518e381'
p4846
sg17
g4825
sg41
I0
sg4
I0
sg7
I0
sg8
I0
sg10
S'PyZipFile'
p4847
sg9
I0
sbasbsbasbsbasbsb.
|
|
From: <de...@us...> - 2004-01-07 01:48:30
|
Update of /cvsroot/pymerase/smw/smw/scw/Layer/unittests
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/scw/Layer/unittests
Added Files:
__init__.py testLayerManager.py testSfiManager.py
umlcoresupport.py
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: __init__.py ---
__all__ = ['testSfiManager', 'testLayerManager']
from testSfiManager import *
from testLayerManager import *
--- NEW FILE: testLayerManager.py ---
#!/usr/bin/env python2
__layer__ = 'Layer'
import unittest
from smw.metamodel import UML14 as metamodel
from smw.metamodel.UML14 import *
from smw.scw.Layer.LayerManager import *
from smw.scw.Layer.SfiManager import SfiManager
from smw.scw.Element.unittests import testLayerManager as ElementTestLayerManager
from smw.scw.Project.unittests.testSfiManager import mkUniqueStr
from smw.scw.Element.LayerManager import mkTestCaseName
# todo:
# moving package out from layer --> layerpackagedependency? renaming it?
# fix ancestor tests fully.
# package unittestdependency rename to Element layer.
# rename layer package depdency, layer generalization when renaming class/interface or layer underneat
[...2864 lines suppressed...]
fitem=[None,mkUniqueStr(),self.model,Package(),titem[0],titem[1],titem[2],titem[3]]
# we are all set to test:
for f in fitem:
if fitem.index(f)!=0:
self.assert_(f,'Item was not created properly.')
for t in titem:
g=self.lMan.addLayerGeneralization(f,t)
self.assert_(not g,'Generalization was incorrectly created.')
## def testUpdateLayerPackageDependencies(self):
## pass
## def testUpdateLayerGeneralizations(self):
if __name__ == '__main__':
unittest.main()
--- NEW FILE: testSfiManager.py ---
#!/usr/bin/env python2
__layer__ = 'Layer'
import unittest,os,os.path,sys
from smw.metamodel import UML14 as metamodel
from smw.metamodel.UML14 import *
from smw.scw.Project.unittests.testSfiManager import mkUniqueStr
from smw.scw.Element.unittests.testSfiManager import testSfiManager as ElementTestSfiManager
from smw.scw.Element.LayerManager import mkTestCaseName
from smw.scw.Layer.SfiManager import SfiManager
from smw.scw.Layer.LayerManager import mkLayerDependencyName
# todo:
# problem with existing name in successor layers
# change owner/namespace needs some work.
class testSfiManager(ElementTestSfiManager):
[...2821 lines suppressed...]
self.assert_(c1,"failed to create a class.")
c2=l2.ownedElement.select(lambda l:l.name==c1.name)[0]
res=self.sMan.connectClasses(c1,c2)
self.assert_(res,"Failed to connect classes.")
classes=l1.ownedElement.select(lambda l: isinstance(l,metamodel.Class))
self.assert_(len(classes)==0,"Failed to clean the highest layer.")
classes=l2.ownedElement.select(lambda l: isinstance(l,metamodel.Class))
self.assert_(len(classes)==2,"Didn't find the class and testclass in layer.")
self.assert_(c1.namespace==None,"Failed to detach the class 1.")
testClass=self.sMan.layerManager().getTestClient(c2)
self.assert_(testClass,"test class not found.")
utDep=testClass.generalization.select(lambda l:l.parent.name=="TestCase")
self.assert_(len(utDep)==1,"Failed to move the inheritance of testcase to ancestor test class.")
if __name__ == '__main__':
obj2test = SfiManager()
suite=unittest.TestLoader().loadTestsFromTestCase(testSfiManager)
unittest.TextTestRunner().run(suite)
--- NEW FILE: umlcoresupport.py ---
#Copyright 2001,2002 by Ivan Porres ip...@ab...
#
import copy
import inspect
import types
import string
class UMLClass:
def __init__(self,**args):
self.__initattrs__(**args)
def __initattrs__(self,**args):
for name in self.__mm__.keys():
if not self.__dict__.has_key(name):
(mmtype,multiplicity,otherRole,otherMultiplicity,qualifier,frozen)=self.__mm__[name]
if qualifier:
self.__dict__[name]=UMLQAssociationEnd({},self,name,self.__mm__[name])
else:
self.__dict__[name]=UMLAssociationEnd([],self,name,self.__mm__[name])
for k in args.keys():
self.__setattr__(k,args[k])
def __resetattrs__(self):
"""sets the associations of a UMLCLass to default values. This method is usefull to unlik an object."""
for name in self.__mm__.keys():
(mmtype,multiplicity,otherRole,otherMultiplicity,qualifier, frozen)=self.__mm__[name]
self.__setattr__(name,UMLAssociationEnd([],self,name,self.__mm__[name]))
def __whereIsAttrDefined__(self,a,candidate=None):
if not candidate:
candidate=self.__class__
for b in candidate.__bases__:
if b.__mm__.has_key(a):
candidate=b.__whereIsAttrDefined__(self,a,b)
return candidate
def __getstate__(self):
# returns a dictionary with the state of the object
# the dictionary does not contain empty attributes or association ends
# since they are created by init
dict=copy.copy(self.__dict__)
for name in self.__mm__.keys():
(mmtype,multiplicity,otherRole,otherMultiplicity,qualifier, frozen)=self.__mm__[name]
if getattr(self,name).size()==0:
del dict[name]
else:
if getattr(self,name)==None:
del dict[name]
return dict
def __setstate__(self,newstate):
self.__initattrs__()
for k in newstate.keys():
self.__dict__[k]=newstate[k]
def __setclass__(self,newclass):
self.__class__=newclass
self.__mm___=newclass.__mm__
self.__initattrs__()
def __setattr__(self,name,val):
if self.__mm__.has_key(name):
(mmtype,multiplicity,otherRole,otherMultiplicity,qualifier, frozen)=self.__mm__[name]
if self.__dict__[name].__frozen__:
raise "Updating a frozen association end"
if self.__dict__[name] and otherRole:
for x in self.__dict__[name]:
x.__dict__[otherRole].remove(self)
if type(val)!=types.ListType and not (
type(val)==types.InstanceType and isinstance(
val,UMLAssociationEnd)):
val=[val]
if type(val)==types.ListType:
self.__dict__[name]=UMLAssociationEnd(val,self,name,self.__mm__[name])
elif type(val)==types.InstanceType and isinstance(val,UMLAssociationEnd):
if val.__mm__[1]!=mmtype:
raise WFRException("TypeError: AssociationEnd has different mmtype")
else:
# should it be a copy?
self.__dict__[name]=val
else:
raise WFRException("TypeError: it should be list or UMLAssociationEnd")
else:
# attribute or association not found
#raise "TypeError: Attribute or association not found"
self.__dict__[name]=val
def asSet(self):
return UMLSet([self])
def oclIsKindOf(self,t):
return isinstance(self,t)
def isTypeOf(self,t):
return type(self)==type(t)
class UMLCollection:
def __init__(self,items=None,frozen=0):
if not items:
self.items=[]
else:
self.items=copy.copy(items)
self.__frozen__=frozen
def __getitem__(self,key):
if type(key)==type(slice(0,0)):
return self.items[key.start:key.stop]
else:
return self.items[key]
def __getattr__(self,attr):
# shorthand for collect page 6-71
if attr[:2]=="__" or (self.items and not hasattr(self.items[0],attr)):
raise AttributeError
result=UMLBag()
if len(self.items)>1:
for v in self.items:
result.append(getattr(v,attr))
return result
else:
return getattr(self.items[0],attr)
def sort(self,func):
self.items.sort(func)
def __add__(v1,v2):
self.items=v1.items+v2.items
def __setitem__(self,key,items):
if self.__frozen__:
raise "Updating a frozen collection"
self.items[key]=items
def remove(self,items):
if self.__frozen__:
raise "Updating a frozen collection"
self.items.remove(items)
def __len__(self):
return len(self.items)
def __getstate__(self):
return {"items":copy.copy(self.items)}
def __setstate__(self,state):
self.items=state["items"]
def __repr__(self):
return str(self.__dict__.get('items',[]))
# OCL-like memebers
def size(self):
return len(self.items)
def includes(self,o):
return o in self.items
def excludes(self,o):
return not self.includes(o)
def count(self,o):
c=0
for x in self.items:
if x==o:
c=c+1
return c
def includesAll(self,c):
for o in c:
if o not in self.items:
return 0
return 1
def excludesAll(self,c):
for o in c:
if o in self.items:
return 0
return 1
def select(self,f):
result=UMLSet()
for v in self.items:
if f(v):
result.append(v)
return result
def reject(self,f):
result=UMLSet()
for v in self.items:
if not f(v):
result.append(v)
return result
def collect(self,f):
result=UMLBag()
for v in self.items:
result.append(f(v))
return result
def isEmpty(self):
return len(self.items)==0
def nonEmpty(self):
return not self.isEmpty()
def sum(self):
r=0
for o in self.items:
r=r+o
return o
def forAll(self,f):
if not self.items or not inspect.getargspec(f)[0]:
return 1
nargs=len(inspect.getargspec(f)[0])
if inspect.getargspec(f)[3]:
nargs=nargs-len(inspect.getargspec(f)[3])
assert(nargs>0)
nitems=len(self.items)
index=[0]*nargs
while 1:
args=[]
for x in index:
args.append(self.items[x])
if not apply(f,args):
return 0
c=len(index)-1
index[c]=index[c]+1
while index[c]==nitems:
index[c]=0
c=c-1
if c<0:
return 1
else:
index[c]=index[c]+1
if index[c]==nitems-1:
c=c-1
def exist(self,f):
if not self.items or not inspect.getargspec(f)[0]:
return 0
nargs=len(inspect.getargspec(f)[0])
if inspect.getargspec(f)[3]:
nargs=nargs-len(inspect.getargspec(f)[3])
assert(nargs>0)
nitems=len(self.items)
index=[0]*nargs
while 1:
args=[]
for x in index:
args.append(self.items[x])
if apply(f,args):
return 1
c=len(index)-1
index[c]=index[c]+1
while index[c]==nitems:
index[c]=0
c=c-1
if c<0:
return 0
else:
index[c]=index[c]+1
if index[c]==nitems-1:
c=c-1
class UMLBag(UMLCollection):
def insert(self,v):
self.append(v)
def append(self,v):
if self.__frozen__:
raise "Updating a frozen collection"
self.items.append(v)
class UMLSequence(UMLCollection):
def insert(self,v):
self.append(v)
def append(self,v):
if self.__frozen__:
raise "Updating a frozen collection"
for i in range(len(self.items)):
if v<self.items[i]:
self.items=self.items[:i]+[v]+self.items[i:]
return
self.items.append(v)
class UMLSet(UMLCollection):
def insert(self,v):
self.append(v)
def append(self,v):
if self.__frozen__:
raise "Updating a frozen collection"
if v not in self.items:
self.items.append(v)
class UMLAssociationEnd(UMLSet):
def __init__(self,value,parent,name,mm):
self.__name__=name
self.__mm__=mm
self.parent=parent
UMLSet.__init__(self,frozen=mm[5])
for v in value:
self.append(v)
def __setstate__(self,state):
#print state
self.parent=state["parent"]
self.__mm__=state["__mm__"]
self.__name__=state["__name__"]
self.items=state["items"]
def append(self,v):
if self.__frozen__==1:
raise "Appending a frozen association end"
if v not in self.items:
if type(v)!=types.InstanceType and isinstance(v,UMLClass):
raise WFRException("An associationEnd cannot contain",v)
(mmtype,multiplicity,otherRole,otherMultiplicity,qualifier, frozen)=self.__mm__
self.items.append(v)
if otherRole and self.parent not in v.__dict__[otherRole].items:
v.__dict__[otherRole].items.append(self.parent)
add=append
insert=append
def remove(self,item):
if self.__frozen__:
raise "Updating a frozen association end"
if item in self.items:
(mmtype,multiplicity,otherRole,otherMultiplicity,qualifier, frozen)=self.__mm__
if otherRole:
item.__dict__[otherRole].items.remove(self.parent)
self.items.remove(item)
def __getstate__(self):
state={}
toSave=[]
for p in self.items:
toSave.append(p)
state['__mm__']=self.__mm__
state['__name__']=self.__name__
state['parent']=self.parent
state['items']=toSave
return state
class UMLQSet(UMLCollection):
def __init__(self,items=None,frozen=0):
if not items:
self.items={}
else:
self.items=copy.copy(items)
self.__frozen__=frozen
def __getitem__(self,key):
if type(key)==type(slice(0,0)):
return self.items.values()[key.start:key.stop]
else:
return self.items[key]
def __iter__(self):
return iter(self.items.values())
def __getattr__(self,attr):
# shorthand for collect page 6-71
if attr[:2]=="__" or (self.items and not hasattr(self.items.values()[0],attr)):
raise AttributeError
result=UMLBag()
if len(self.items)>1:
for v in self.items.values():
result.append(getattr(v,attr))
return result
else:
return getattr(self.items.values()[0],attr)
def __repr__(self):
return str(self.__dict__.get('items',{}))
class UMLQAssociationEnd(UMLQSet):
def __init__(self,value,parent,name,mm):
self.__name__=name
self.__mm__=mm
self.parent=parent
UMLQSet.__init__(self,frozen=mm[5])
for v in value.keys():
self.items[v]=value[v]
def __setstate__(self,state):
#print state
self.parent=state["parent"]
self.__mm__=state["__mm__"]
self.__name__=state["__name__"]
self.items=state["items"]
def __setitem__(self,key,v):
(mmtype,multiplicity,otherRole,otherMultiplicity,qualifier, frozen)=self.__mm__
if self.__frozen__:
raise "Updating a frozen collection"
if otherRole and self.parent not in v.__dict__[otherRole].items:
v.__dict__[otherRole].items.append(self.parent)
self.items[key]=v
def __contains__(self, v):
return v in self.items.values()
def __delitem__(self,key):
item=self.items[key]
del self.items[key]
(mmtype,multiplicity,otherRole,otherMultiplicity,qualifier, frozen)=self.__mm__
if otherRole:
item.__dict__[otherRole].items.remove(self.parent)
def remove(self,item):
toDelete=None
for k in self.items.keys():
if self.items[k]==item:
toDelete=k
break
if toDelete:
del self[toDelete]
|
|
From: <de...@us...> - 2004-01-07 01:48:30
|
Update of /cvsroot/pymerase/smw/smw/scw/Correctness/unittests
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/scw/Correctness/unittests
Added Files:
__init__.py testLayerManager.py testSfiManager.py
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: __init__.py ---
__all__ = ['testSfiManager', 'testLayerManager']
from testSfiManager import *
from testLayerManager import *
--- NEW FILE: testLayerManager.py ---
#!/usr/bin/env python2
__layer__ = 'Correctness'
import unittest
from smw.metamodel import UML14 as metamodel
from smw.metamodel.UML14 import *
from smw.scw.Correctness.LayerManager import LayerManager
from smw.scw.Correctness.SfiManager import SfiManager
from smw.scw.Layer.unittests.testLayerManager import testLayerManager as LayerTestLayerManager
class testLayerManager(LayerTestLayerManager):
def setUp(self):
self.lMan = LayerManager()
self.model = Model()
if __name__ == '__main__':
# obj2test = SfiManager()
# suite = unittest.TestLoader().loadTestsFromTestCase(testLayerManager)
# unittest.TextTestRunner().run(suite)
unittest.main()
--- NEW FILE: testSfiManager.py ---
#!/usr/bin/env python2
__layer__ = 'Correctness'
import unittest
from smw.metamodel import UML14 as metamodel
from smw.metamodel.UML14 import *
#from LayerManager import LayerManager
from smw.scw.Correctness.SfiManager import SfiManager
from smw.scw.Layer.unittests.testSfiManager import testSfiManager as LayerTestSfiManager
from smw.scw.Project.unittests.testSfiManager import mkUniqueStr
from smw.io import *
import os
import os.path
import sys
from smw.scw.py2uml import *
import popen2
class testSfiManager(LayerTestSfiManager):
#class testSfiManager(unittest.TestCase):
def setUp(self):
self.sMan = obj2test
def testTaggingNewProjects(self):
self.sMan.setUp()
for x in range(1):
proj=self.sMan.newProject()
self.assert_(proj,'project was not created')
tagNames=[]
for x in proj.taggedValue:
tagNames.append(x.name)
self.assert_("correctness" in tagNames,"%s The correctness tag was not created" %x)
def testTaggingLayers(self):
self.sMan.setUp()
proj=self.sMan.newProject()
for x in range(10):
layer=self.sMan.newLayer()
tagNames=[]
for x in layer.taggedValue:
tagNames.append(x.name)
self.assert_("correctness" in tagNames,"%s The correctness tag was not created" %x)
# Testing for tag value in 'inherited' class
l1=self.sMan.newLayer([],[])
self.assert_(l1,"Layer was not created.")
self.sMan.focusOnElement(l1)
c1=self.sMan.newClass()
l2=self.sMan.newLayer([l1],[])
classes=l2.ownedElement.select(lambda x: x.name==c1.name)
self.assert_(len(classes)==1,"Class was no created to successor.")
c=classes[0]
tags=c.taggedValue.select(lambda x: x.name=="correctness")
self.assert_(len(tags)==1,"Tag was not added to inherited class.")
def testAttachingTags(self):
elements=[]
self.sMan.setUp()
proj=self.sMan.newProject()
class1=self.sMan.newClass()
elements.append(class1)
self.sMan.focusOnElement(proj)
pack=self.sMan.newPackage()
elements.append(pack)
self.sMan.focusOnElement(proj)
##int=self.sMan.newInterface()
## elements.append(int)
for y in elements:
tagNames=[]
for x in y.taggedValue:
tagNames.append(x.name)
self.assert_("correctness" in tagNames, "%s The correctness tag was not created" %y)
# test that creating new elements affects recursively to previous levels
self.sMan.setUp()
proj=self.sMan.newProject()
layer1=self.sMan.newLayer()
self.sMan.focusOnElement(layer1)
pack1=self.sMan.newPackage()
for x in layer1.taggedValue:
if x.name=="correctness":
x.dataValue="all tests passed"
for x in pack1.taggedValue:
if x.name=="correctness":
x.dataValue="all tests passed"
self.sMan.focusOnElement(layer1)
self.sMan.newClass()
for x in layer1.taggedValue:
if x.name=="correctness":
self.assert_(x.dataValue=="undefined","Should update the layer tag to undefined")
for x in pack1.taggedValue:
if x.name=="correctness":
self.assert_(x.dataValue=="all tests passed","shouldn't update the package tag")
self.sMan.focusOnElement(pack1)
self.sMan.newClass()
for x in pack1.taggedValue:
if x.name=="correctness":
self.assert_(x.dataValue=="undefined","should update the package tag")
def testLoadProject99(self):
self.sMan.setUp()
sname=mkUniqueStr()+'.iml'
mname=mkUniqueStr()
cname=mkUniqueStr()
p1name=mkUniqueStr()
p2name=mkUniqueStr()
c1name=mkUniqueStr()
m=metamodel.Model()
m.name=mname
p1=metamodel.Package()
p1.name=p1name
p1.namespace=m
p2=metamodel.Package()
p2.name=p2name
p2.namespace=m
c=metamodel.Class()
c.name=cname
c.namespace=p2
c1=metamodel.Class()
c1.name=c1name
c1.namespace=m
rv=saveModel(sname,m)
self.assert_(rv,'saving was unsuccesful')
self.sMan.setUp()
p=self.sMan.loadProject(sname)
self.assert_(isinstance(p,metamodel.Model),'loading was unsuccesful')
self.assertEqual(p,self.sMan.currentProject(),'wrong current project')
eles=self.sMan.layerManager().returnElements(p)
ele=[]
for e in eles:
if e.oclIsKindOf(metamodel.Classifier) or e.oclIsKindOf(metamodel.Package):
ele.append(e)
for el in ele:
inapp=None
if not (el.oclIsKindOf(metamodel.Model)):
ns=el.namespace
while not ns==p:
if ns.name=='python2_2':
inapp=1
ns=p
else:
ns=ns.namespace
onames=[]
for i in el.taggedValue:
onames.append(i.name)
if not self.sMan.layerManager().isTestClass(el) and not inapp and not el.name=="python2_2":
self.assert_("correctness" in onames, "The correctness-tag was not created")
else:
self.assert_(not "correctness" in onames, "'correctness' tag should not be created into a testClass")
popen2.popen2("rm "+sname)
def testCorrectnessNewLayer(self):
self.sMan.setUp()
self.sMan.newProject()
l0=self.sMan.newLayer()
self.sMan.focusOnElement(l0)
self.sMan.newClass()
self.sMan.focusOnElement(l0)
#self.sMan.newInterface()
self.sMan.focusOnElement(l0)
l0p0=self.sMan.newPackage()
self.sMan.focusOnElement(l0p0)
self.sMan.newClass()
self.sMan.focusOnElement(l0p0)
#self.sMan.newInterface()
self.sMan.focusOnElement(l0p0)
self.sMan.newPackage()
l1=self.sMan.newLayer(anc=l0)
self.assert_(l1,'Layer was not created.')
elements=[l1]
while (elements):
e=elements.pop()
if (isinstance(e,Classifier) or isinstance(e,Package)) \
and not self.sMan.layerManager().isTestClass(e):
tg=e.taggedValue.select(lambda x: x.name=="correctness")
self.assert_(len(tg)==1,'Wrong number of correctness tags for %s' %e)
self.assert_(tg[0].dataValue=="undefined","wrong initial value on layer correctness tag")
if isinstance(e,Package):
for pe in e.ownedElement:
elements.append(pe)
def testCorrectnessNewClass(self):
self.sMan.setUp()
self.sMan.newProject()
l0=self.sMan.newLayer()
l1=self.sMan.newLayer(anc=l0)
self.sMan.focusOnElement(l0)
self.sMan.newClass()
self.sMan.focusOnElement(l0)
l0p0=self.sMan.newPackage()
self.sMan.focusOnElement(l0p0)
self.sMan.newClass()
elements=[l1]
while (elements):
e=elements.pop()
if (isinstance(e,Classifier) or isinstance(e,Package)) \
and not self.sMan.layerManager().isTestClass(e):
tg=e.taggedValue.select(lambda x: x.name=="correctness")
self.assert_(len(tg)==1,'Wrong number of correctness tags for %s' %e)
self.assert_(tg[0].dataValue=="undefined","wrong initial value on Class correctness tag")
if isinstance(e,Package):
for pe in e.ownedElement:
elements.append(pe)
##def testCorrectnessNewInterface(self):
## self.sMan.setUp()
## self.sMan.newProject()
## l0=self.sMan.newLayer()
## l1=self.sMan.newLayer(anc=l0)
## self.sMan.focusOnElement(l0)
## self.sMan.newInterface()
## self.sMan.focusOnElement(l0)
## l0p0=self.sMan.newPackage()
## self.sMan.focusOnElement(l0p0)
## self.sMan.newInterface()
## elements=[l1]
## while (elements):
## e=elements.pop()
## if (isinstance(e,Classifier) or isinstance(e,Package)) \
## and not self.sMan.layerManager().isTestClass(e):
## tg=e.taggedValue.select(lambda x: x.name=="correctness")
## self.assert_(len(tg)==1,'Wrong number of correctness tags for %s' %e)
## if isinstance(e,Package):
## for pe in e.ownedElement:
## elements.append(pe)
def testCorrectnessNewPackage(self):
self.sMan.setUp()
self.sMan.newProject()
l0=self.sMan.newLayer()
l1=self.sMan.newLayer(anc=l0)
self.sMan.focusOnElement(l0)
self.sMan.newPackage()
self.sMan.focusOnElement(l0)
l0p0=self.sMan.newPackage()
self.sMan.focusOnElement(l0p0)
self.sMan.newPackage()
elements=[l1]
while (elements):
e=elements.pop()
if (isinstance(e,Classifier) or isinstance(e,Package)) \
and not self.sMan.layerManager().isTestClass(e):
tg=e.taggedValue.select(lambda x: x.name=="correctness")
self.assert_(len(tg)==1,'Wrong number of correctness tags for %s' %e)
self.assert_(tg[0].dataValue=="undefined","wrong initial value on Package correctness tag")
if isinstance(e,Package):
for pe in e.ownedElement:
elements.append(pe)
def testAttachSuccessorTags(self):
self.sMan.setUp()
self.sMan.newProject()
# Direct testing not possible... useless test
D=2 # depth (packages)
N=5 # lenght of chain
B=2 # nro of branches
l0=self.sMan.newLayer()
a=l0
for x in range(B):
ln=self.sMan.newLayer(anc=a)
a2=ln
for y in range(N):
ln2=self.sMan.newLayer(anc=a2)
a2=ln2
ns=l0
for x in range(D):
self.sMan.focusOnElement(ns)
pd=self.sMan.newPackage()
self.sMan.focusOnElement(ns)
cd=self.sMan.newClass()
self.sMan.focusOnElement(ns)
#id=self.sMan.newInterface()
ns=pd
layers=[l0]
while (layers):
#for x in range(D):
e=layers.pop()
layers.extend(self.sMan.layerManager().successors(e))
for x in range(D):
for oe in e.ownedElement:
if (isinstance(oe,Classifier) or isinstance(oe,Package)) \
and not self.sMan.layerManager().isTestClass(oe):
tg=oe.taggedValue.select(lambda x: x.name=="correctness")
self.assert_(len(tg)==1,'Wrong number of correctness tags for %s' %oe)
e=e.ownedElement.select(lambda x: isinstance(x,Package))[0]
if __name__ == '__main__':
obj2test = SfiManager()
suite=unittest.TestLoader().loadTestsFromTestCase(testSfiManager)
unittest.TextTestRunner().run(suite)
|
|
From: <de...@us...> - 2004-01-07 01:48:30
|
Update of /cvsroot/pymerase/smw/smw/scw/CodeGen/unittests
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/scw/CodeGen/unittests
Added Files:
__init__.py testLayerManager.py testSfiManager.py
umlcoresupport.py
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: __init__.py ---
__all__ = ['testSfiManager', 'testLayerManager']
from testSfiManager import *
from testLayerManager import *
--- NEW FILE: testLayerManager.py ---
#!/usr/bin/env python2
__layer__ = 'CodeGen'
import unittest
from smw.metamodel import UML14 as metamodel
from smw.metamodel.UML14 import *
from smw.scw.UndoRedo.LayerManager import LayerManager
from smw.scw.UndoRedo.SfiManager import SfiManager
from smw.scw.UndoRedo.unittests.testLayerManager import testLayerManager as UndoRedoTestLayerManager
class testLayerManager(UndoRedoTestLayerManager):
def setUp(self):
self.lMan = LayerManager()
self.model = Model()
if __name__ == '__main__':
# obj2test = SfiManager()
# suite = unittest.TestLoader().loadTestsFromTestCase(testLayerManager)
# unittest.TextTestRunner().run(suite)
unittest.main()
--- NEW FILE: testSfiManager.py ---
#!/usr/bin/env python2
__layer__ = 'CodeGen'
import unittest
from smw.metamodel import UML14 as metamodel
#from LayerManager import LayerManager
from smw.scw.CodeGen.SfiManager import SfiManager
from smw.scw.UndoRedo.unittests.testSfiManager import testSfiManager as UndoRedoTestSfiManager
import os
import os.path
import sys
from smw.scw.py2uml import *
import popen2
from smw.io import *
# class testSfiManager(unittest.TestCase):
class testSfiManager(UndoRedoTestSfiManager):
def setUp(self):
self.sMan=obj2test
def testGenerateCode(self):
self.sMan.setUp()
project1 = self.sMan.newProject("testproject1")
returnv = self.sMan.generateCode(os.getcwd())
self.assert_(os.path.isdir("testproject1"), "Error in generate code: the directory package was not created.")
pu = py2uml()
py2uml.convert(pu,"testproject1","testproject1.iml") # we have saved testproject1.iml file
popen2.popen2("rm -r testproject1")
self.sMan.setUp()
some=self.sMan.loadProject("testproject1.iml")
self.assert_(self.sMan.currentProject().name == "testproject1", "Failure in generateCode: proper project was not loaded back.")
popen2.popen2("rm testproject1.iml")
self.assert_(isinstance(returnv,metamodel.Model) and returnv.name == project1.name, "Failure. correct return value was not given back.")
elem = self.sMan.layerManager().returnElements(self.sMan.currentProject())
# tests for special cases:
# no current project.
self.sMan.setUp()
returnv = self.sMan.generateCode(os.getcwd())
self.assert_(returnv,'No return value from failed code generation')
self.assert_(isinstance(returnv,str) , "Didn't get a string from failed code generation.")
# the given path is invalid.
self.sMan.setUp()
returnv = self.sMan.generateCode("nonexistingdir")
self.assert_(returnv, "No return value from failed code generation")
self.assert_(isinstance(returnv,str), "Didn't get a string from failed code generation.")
# path parameter is not given.
self.sMan.setUp()
project1 = self.sMan.newProject("testproject2")
returnv = self.sMan.generateCode()
self.assert_(isinstance(returnv,metamodel.Model) and returnv.name == project1.name , "Failure in generating code without path parameter.")
# popen2.popen2("rm -r testproject2")
self.sMan.setUp()
project1=self.sMan.newProject("testProject2")
self.sMan.newClass()
self.sMan.newOperation()
saveModel("testi.iml",self.sMan.currentProject())
returnv = self.sMan.generateCode()
self.assert_(isinstance(returnv,metamodel.Model),"Failed to generate code ...")
popen2.popen2("rm testi.iml")
# test with path that the user doesn't have write rights
self.sMan.setUp()
p=self.sMan.newProject()
c1=self.sMan.newClass()
returnv=self.sMan.generateCode("/usr/lib/python2.2/")
self.assert_(returnv,"no return value from failing code generation")
self.assert_(isinstance(returnv,str),"didn't receive string from failing code generation")
# test that no code is generated from project which violates the well-formed rules
self.sMan.setUp()
p=self.sMan.newProject()
c1=self.sMan.newClass()
self.sMan.focusOnElement(p)
c2=self.sMan.newClass()
g1=self.sMan.newGeneralization(c1,c2)
self.assert_(g1,'failed to create generalization')
g2=metamodel.Generalization()
g2.child=c1
g2.parent=c2
g2.namespace=p
try:
p.isWellFormedRecursive()
self.fail('wfr not violated')
except:
pass
rv=self.sMan.generateCode()
self.assert_(rv,"Didn't get a return value from failing code generation")
# self.assert_(isinstance(rv,str),"Didn't get a string from failing code generation")
# rv is not a string...some error message ?
# test that the code is generated only if the model is changed
# test for timestamp
self.sMan.setUp()
p=self.sMan.newProject('testProject')
self.assert_(p,'project was not generated')
self.assert_(self.sMan.codeGenTimestamp['testProject']==0,\
'wrong timestamp')
code=self.sMan.generateCode()
self.assert_(code,'None was returned')
self.assert_(self.sMan.codeGenTimestamp['testProject']>0,\
'wrong timestamp, should be > 0')
code=self.sMan.generateCode()
self.assert_(isinstance(code,str),'string was not returned')
c=self.sMan.newClass()
self.assert_(c,'class was not generated')
code=self.sMan.generateCode()
self.assert_(code,'None was returned')
self.assert_(self.sMan.codeGenTimestamp['testProject']>0,\
'wrong timestamp, should be > 0')
# test for timestamp
def testIsCodeGenerated(self):
self.sMan.setUp()
p=self.sMan.newProject()
self.assert_(not self.sMan.isCodeGenerated(),'returned true when there is no code')
for x in range(10):
p=self.sMan.newPackage()
self.assert_(p,'class was not generated')
self.assert_(not self.sMan.isCodeGenerated(),'returned true when there is no code')
code=self.sMan.generateCode()
self.assert_(code,'None returned')
self.assert_(self.sMan.isCodeGenerated(),'returned false when there is code')
def testNewProjectCodeGen(self):
# test for the timestamp
self.sMan.setUp()
p=self.sMan.newProject()
self.assert_(self.sMan.codeGenTimestamp.has_key(p.name),\
'Project is not in the dictionary')
self.assert_(self.sMan.codeGenTimestamp[p.name]==0,'wrong value')
def testRenameProjectCodeGen(self):
# tests for timestamp
self.sMan.setUp()
p=self.sMan.newProject('oldname')
self.assert_(self.sMan.codeGenTimestamp.has_key('oldname'),\
'old name not found ')
v=self.sMan.codeGenTimestamp['oldname']
n=self.sMan.renameProject(p.name,'newname')
self.assert_(n,'None was returned')
self.assert_(self.sMan.codeGenTimestamp.has_key('newname'),\
'new name not found ')
self.assert_(self.sMan.codeGenTimestamp['newname']==v,'wrong value')
self.assert_(not self.sMan.codeGenTimestamp.has_key('oldname'),\
'old name found ')
def testDeleteProjectCodeGen(self):
# tests for timestamp
self.sMan.setUp()
p=self.sMan.newProject('name')
self.assert_(self.sMan.codeGenTimestamp.has_key('name'),\
'name not found ')
d=self.sMan.deleteProject(p.name)
self.assert_(d,'delete failed')
self.assert_(not self.sMan.codeGenTimestamp.has_key('name'),\
'name is still in the dictionary' )
def testLoadProjectCodeGen(self):
self.sMan.setUp()
p=self.sMan.newProject()
self.assert_(p,'newProject failed')
s=self.sMan.saveProject()
self.assert_(s,'save failed')
l=self.sMan.loadProject(p.name+'.iml')
self.assert_(l,'load failed')
self.assert_(self.sMan.codeGenTimestamp.has_key(p.name),\
'name not found ')
self.assert_(self.sMan.codeGenTimestamp[p.name]==0,'wrong value')
def testRenameElementCodeGen(self):
self.sMan.setUp()
self.sMan.newProject()
c1=self.sMan.newClass()
self.sMan.setApplication(c1)
x=c1.taggedValue.select(lambda x: x.name=="application")
self.assert_(len(x)==1,"Didn't find the application tag")
s=string.split(x[0].dataValue,"import ")[1]
s=string.split(s,self.sMan.returnCode())
s=s[0]
self.assert_(s==c1.name,"class name was not found from application tag")
self.sMan.renameElement(c1,"newName")
self.assert_(c1.name=="newName","renaming class failed")
x=c1.taggedValue.select(lambda x: x.name=="application")
self.assert_(len(x)==1,"Didn't find the application tag")
print x[0].dataValue
s=string.split(x[0].dataValue,"import ")[1]
s=string.split(s,self.sMan.returnCode())[0]
self.assert_(s==c1.name,"class name was not found from application tag after renaming the class")
def testSetApplication(self):
self.sMan.setUp()
someClass=metamodel.Class()
ApplicationClass=self.sMan.setApplication(someClass)
self.assertEqual(ApplicationClass,None,"Was able to set an outside class as application class in project")
project=self.sMan.newProject()
ApplicationClass=self.sMan.setApplication(someClass)
self.assertEqual(ApplicationClass,None,"Was able to set an outside class as application class in project")
someClass=self.sMan.newClass()
ApplicationClass=self.sMan.setApplication(someClass)
self.assertEqual(ApplicationClass,someClass,"Failed to set a class as application class")
classList=[]
for i in range(10):
self.sMan.focusOnElement(project)
tempClass=self.sMan.newClass()
ApplicationClass=self.sMan.setApplication(tempClass)
classList.append(ApplicationClass)
self.assertEqual(ApplicationClass,tempClass,"Failed to set a class as application class")
if i != 0:
tags=[]
for x in classList[i-1].taggedValue:
tags.append(x.name)
self.assert_("application" not in tags, "Failed to remove previous tag")
# self.assertEqual(len(ApplicationClass.taggedValue), 1, "Failed, application tag is not found in application class")
list=[]
tag=None
for x in ApplicationClass.taggedValue:
list.append(x.name)
if x.name=="application":
tag=x
self.assert_("application" in list, "Failed, application tag was not named right")
self.assertNotEqual(tag.dataValue,"","Application tag doesn't hold any script code")
def testExecute(self):
self.sMan.setUp()
self.sMan.newProject()
class1=self.sMan.newClass()
self.sMan.setApplication(class1)
temp=self.sMan.execute()
self.assertEqual(temp,None,"Failure, should return None when trying to execute before code generation")
#paketin oikeellisuus...
def testRunTest(self):
self.sMan.setUp()
project = self.sMan.newProject("testProject11")
layer1=self.sMan.newLayer()
self.sMan.focusOnElement(layer1)
pack1=self.sMan.newPackage("pack1")
class1=self.sMan.newClass("testi")
testClass=self.sMan.layerManager().getTestClient(class1)
self.sMan.focusOnElement(pack1)
self.assert_(not self.sMan.runTest([testClass]),"Should return none")
self.assertEqual(self.sMan.runTest([class1]),None,"Should return none when trying to run with norm class")
returnv=self.sMan.generateCode(os.getcwd())
self.assertNotEqual(self.sMan.runTest([testClass]),None,"Should run the test after code generation")
## TEE TESTI MISSÄ LAYER/PACKAGE ON "all tests passed" JA SITTEN TEE FAILAAVA TOTEUTUS TESTIIN--> LAYER/PACKAGE on "some tests failed"
popen2.popen2("rm -r testProject11")
def testRunAllTests(self):
self.sMan.setUp()
project=self.sMan.newProject("testProject22")
pack1=self.sMan.newPackage()
class1=self.sMan.newClass()
self.sMan.focusOnElement(pack1)
class2=self.sMan.newClass()
method1=self.sMan.newMethod()
self.sMan.focusOnElement(pack1)
class3=self.sMan.newClass()
testClass1=self.sMan.layerManager().getTestClient(class1)
testClass2=self.sMan.layerManager().getTestClient(class2)
testClass3=self.sMan.layerManager().getTestClient(class3)
self.assert_(not self.sMan.runAllTests(),"Should return None. code is generated")
## ERROR IN UML2PY
returnv=self.sMan.generateCode(os.getcwd())
self.assertNotEqual(self.sMan.runAllTests(),None,"Should run the tests after code generation")
popen2.popen2("rm -r testProject22")
def testUpdateModelTags(self):
self.sMan.setUp()
proj=self.sMan.newProject('newProject')
class1=self.sMan.newClass()
self.sMan.focusOnElement(proj)
layer1=self.sMan.newLayer()
self.sMan.focusOnElement(layer1)
class2=self.sMan.newClass()
self.sMan.focusOnElement(layer1)
pack1=self.sMan.newPackage()
class3=self.sMan.newClass()
c=self.sMan.generateCode(os.getcwd())
self.assert_(c,'No code generated')
res=self.sMan.runTest([self.sMan.layerManager().getTestClient(class3)])
self.assert_(res,'no result')
for x in pack1.taggedValue:
if x.name=="correctness":
self.assert_(x.dataValue=="all tests passed","Should have all tests passed in correctness tag")
for x in layer1.taggedValue:
if x.name=="correctness":
self.assert_(x.dataValue=="undefined","shouldn't change the tag at this point")
for x in proj.taggedValue:
if x.name=="correctness":
self.assert_(x.dataValue=="undefined","shouldn't change the tag at this point")
self.sMan.runTest([self.sMan.layerManager().getTestClient(class1)])
for x in pack1.taggedValue:
if x.name=="correctness":
self.assert_(x.dataValue=="all tests passed","Should have all tests passed in correctness tag")
for x in layer1.taggedValue:
if x.name=="correctness":
self.assert_(x.dataValue=="undefined","shouldn't change the tag at this point")
for x in proj.taggedValue:
if x.name=="correctness":
self.assert_(x.dataValue=="undefined","shouldn't change the tag at this point")
self.sMan.runTest([self.sMan.layerManager().getTestClient(class2)])
for x in pack1.taggedValue:
if x.name=="correctness":
self.assert_(x.dataValue=="all tests passed","Should have all tests passed in correctness tag")
for x in layer1.taggedValue:
if x.name=="correctness":
self.assert_(x.dataValue=="all tests passed","Should have all tests passed in correctness tag")
for x in proj.taggedValue:
if x.name=="correctness":
self.assert_(x.dataValue=="all tests passed","Should have all tests passed in correctness tag")
popen2.popen2("rm -r newProject")
if __name__ == '__main__':
obj2test = SfiManager()
suite=unittest.TestLoader().loadTestsFromTestCase(testSfiManager)
unittest.TextTestRunner().run(suite)
--- NEW FILE: umlcoresupport.py ---
#Copyright 2001,2002 by Ivan Porres ip...@ab...
#
import copy
import inspect
import types
import string
class UMLClass:
def __init__(self,**args):
self.__initattrs__(**args)
def __initattrs__(self,**args):
for name in self.__mm__.keys():
if not self.__dict__.has_key(name):
(mmtype,multiplicity,otherRole,otherMultiplicity,qualifier,frozen)=self.__mm__[name]
if qualifier:
self.__dict__[name]=UMLQAssociationEnd({},self,name,self.__mm__[name])
else:
self.__dict__[name]=UMLAssociationEnd([],self,name,self.__mm__[name])
for k in args.keys():
self.__setattr__(k,args[k])
def __resetattrs__(self):
"""sets the associations of a UMLCLass to default values. This method is usefull to unlik an object."""
for name in self.__mm__.keys():
(mmtype,multiplicity,otherRole,otherMultiplicity,qualifier, frozen)=self.__mm__[name]
self.__setattr__(name,UMLAssociationEnd([],self,name,self.__mm__[name]))
def __whereIsAttrDefined__(self,a,candidate=None):
if not candidate:
candidate=self.__class__
for b in candidate.__bases__:
if b.__mm__.has_key(a):
candidate=b.__whereIsAttrDefined__(self,a,b)
return candidate
def __getstate__(self):
# returns a dictionary with the state of the object
# the dictionary does not contain empty attributes or association ends
# since they are created by init
dict=copy.copy(self.__dict__)
for name in self.__mm__.keys():
(mmtype,multiplicity,otherRole,otherMultiplicity,qualifier, frozen)=self.__mm__[name]
if getattr(self,name).size()==0:
del dict[name]
else:
if getattr(self,name)==None:
del dict[name]
return dict
def __setstate__(self,newstate):
self.__initattrs__()
for k in newstate.keys():
self.__dict__[k]=newstate[k]
def __setclass__(self,newclass):
self.__class__=newclass
self.__mm___=newclass.__mm__
self.__initattrs__()
def __setattr__(self,name,val):
if self.__mm__.has_key(name):
(mmtype,multiplicity,otherRole,otherMultiplicity,qualifier, frozen)=self.__mm__[name]
if self.__dict__[name].__frozen__:
raise "Updating a frozen association end"
if self.__dict__[name] and otherRole:
for x in self.__dict__[name]:
x.__dict__[otherRole].remove(self)
if type(val)!=types.ListType and not (
type(val)==types.InstanceType and isinstance(
val,UMLAssociationEnd)):
val=[val]
if type(val)==types.ListType:
self.__dict__[name]=UMLAssociationEnd(val,self,name,self.__mm__[name])
elif type(val)==types.InstanceType and isinstance(val,UMLAssociationEnd):
if val.__mm__[1]!=mmtype:
raise WFRException("TypeError: AssociationEnd has different mmtype")
else:
# should it be a copy?
self.__dict__[name]=val
else:
raise WFRException("TypeError: it should be list or UMLAssociationEnd")
else:
# attribute or association not found
#raise "TypeError: Attribute or association not found"
self.__dict__[name]=val
def asSet(self):
return UMLSet([self])
def oclIsKindOf(self,t):
return isinstance(self,t)
def isTypeOf(self,t):
return type(self)==type(t)
class UMLCollection:
def __init__(self,items=None,frozen=0):
if not items:
self.items=[]
else:
self.items=copy.copy(items)
self.__frozen__=frozen
def __getitem__(self,key):
if type(key)==type(slice(0,0)):
return self.items[key.start:key.stop]
else:
return self.items[key]
def __getattr__(self,attr):
# shorthand for collect page 6-71
if attr[:2]=="__" or (self.items and not hasattr(self.items[0],attr)):
raise AttributeError
result=UMLBag()
if len(self.items)>1:
for v in self.items:
result.append(getattr(v,attr))
return result
else:
return getattr(self.items[0],attr)
def sort(self,func):
self.items.sort(func)
def __add__(v1,v2):
self.items=v1.items+v2.items
def __setitem__(self,key,items):
if self.__frozen__:
raise "Updating a frozen collection"
self.items[key]=items
def remove(self,items):
if self.__frozen__:
raise "Updating a frozen collection"
self.items.remove(items)
def __len__(self):
return len(self.items)
def __getstate__(self):
return {"items":copy.copy(self.items)}
def __setstate__(self,state):
self.items=state["items"]
def __repr__(self):
return str(self.__dict__.get('items',[]))
# OCL-like memebers
def size(self):
return len(self.items)
def includes(self,o):
return o in self.items
def excludes(self,o):
return not self.includes(o)
def count(self,o):
c=0
for x in self.items:
if x==o:
c=c+1
return c
def includesAll(self,c):
for o in c:
if o not in self.items:
return 0
return 1
def excludesAll(self,c):
for o in c:
if o in self.items:
return 0
return 1
def select(self,f):
result=UMLSet()
for v in self.items:
if f(v):
result.append(v)
return result
def reject(self,f):
result=UMLSet()
for v in self.items:
if not f(v):
result.append(v)
return result
def collect(self,f):
result=UMLBag()
for v in self.items:
result.append(f(v))
return result
def isEmpty(self):
return len(self.items)==0
def nonEmpty(self):
return not self.isEmpty()
def sum(self):
r=0
for o in self.items:
r=r+o
return o
def forAll(self,f):
if not self.items or not inspect.getargspec(f)[0]:
return 1
nargs=len(inspect.getargspec(f)[0])
if inspect.getargspec(f)[3]:
nargs=nargs-len(inspect.getargspec(f)[3])
assert(nargs>0)
nitems=len(self.items)
index=[0]*nargs
while 1:
args=[]
for x in index:
args.append(self.items[x])
if not apply(f,args):
return 0
c=len(index)-1
index[c]=index[c]+1
while index[c]==nitems:
index[c]=0
c=c-1
if c<0:
return 1
else:
index[c]=index[c]+1
if index[c]==nitems-1:
c=c-1
def exist(self,f):
if not self.items or not inspect.getargspec(f)[0]:
return 0
nargs=len(inspect.getargspec(f)[0])
if inspect.getargspec(f)[3]:
nargs=nargs-len(inspect.getargspec(f)[3])
assert(nargs>0)
nitems=len(self.items)
index=[0]*nargs
while 1:
args=[]
for x in index:
args.append(self.items[x])
if apply(f,args):
return 1
c=len(index)-1
index[c]=index[c]+1
while index[c]==nitems:
index[c]=0
c=c-1
if c<0:
return 0
else:
index[c]=index[c]+1
if index[c]==nitems-1:
c=c-1
class UMLBag(UMLCollection):
def insert(self,v):
self.append(v)
def append(self,v):
if self.__frozen__:
raise "Updating a frozen collection"
self.items.append(v)
class UMLSequence(UMLCollection):
def insert(self,v):
self.append(v)
def append(self,v):
if self.__frozen__:
raise "Updating a frozen collection"
for i in range(len(self.items)):
if v<self.items[i]:
self.items=self.items[:i]+[v]+self.items[i:]
return
self.items.append(v)
class UMLSet(UMLCollection):
def insert(self,v):
self.append(v)
def append(self,v):
if self.__frozen__:
raise "Updating a frozen collection"
if v not in self.items:
self.items.append(v)
class UMLAssociationEnd(UMLSet):
def __init__(self,value,parent,name,mm):
self.__name__=name
self.__mm__=mm
self.parent=parent
UMLSet.__init__(self,frozen=mm[5])
for v in value:
self.append(v)
def __setstate__(self,state):
#print state
self.parent=state["parent"]
self.__mm__=state["__mm__"]
self.__name__=state["__name__"]
self.items=state["items"]
def append(self,v):
if self.__frozen__==1:
raise "Appending a frozen association end"
if v not in self.items:
if type(v)!=types.InstanceType and isinstance(v,UMLClass):
raise WFRException("An associationEnd cannot contain",v)
(mmtype,multiplicity,otherRole,otherMultiplicity,qualifier, frozen)=self.__mm__
self.items.append(v)
if otherRole and self.parent not in v.__dict__[otherRole].items:
v.__dict__[otherRole].items.append(self.parent)
add=append
insert=append
def remove(self,item):
if self.__frozen__:
raise "Updating a frozen association end"
if item in self.items:
(mmtype,multiplicity,otherRole,otherMultiplicity,qualifier, frozen)=self.__mm__
if otherRole:
item.__dict__[otherRole].items.remove(self.parent)
self.items.remove(item)
def __getstate__(self):
state={}
toSave=[]
for p in self.items:
toSave.append(p)
state['__mm__']=self.__mm__
state['__name__']=self.__name__
state['parent']=self.parent
state['items']=toSave
return state
class UMLQSet(UMLCollection):
def __init__(self,items=None,frozen=0):
if not items:
self.items={}
else:
self.items=copy.copy(items)
self.__frozen__=frozen
def __getitem__(self,key):
if type(key)==type(slice(0,0)):
return self.items.values()[key.start:key.stop]
else:
return self.items[key]
def __iter__(self):
return iter(self.items.values())
def __getattr__(self,attr):
# shorthand for collect page 6-71
if attr[:2]=="__" or (self.items and not hasattr(self.items.values()[0],attr)):
raise AttributeError
result=UMLBag()
if len(self.items)>1:
for v in self.items.values():
result.append(getattr(v,attr))
return result
else:
return getattr(self.items.values()[0],attr)
def __repr__(self):
return str(self.__dict__.get('items',{}))
class UMLQAssociationEnd(UMLQSet):
def __init__(self,value,parent,name,mm):
self.__name__=name
self.__mm__=mm
self.parent=parent
UMLQSet.__init__(self,frozen=mm[5])
for v in value.keys():
self.items[v]=value[v]
def __setstate__(self,state):
#print state
self.parent=state["parent"]
self.__mm__=state["__mm__"]
self.__name__=state["__name__"]
self.items=state["items"]
def __setitem__(self,key,v):
(mmtype,multiplicity,otherRole,otherMultiplicity,qualifier, frozen)=self.__mm__
if self.__frozen__:
raise "Updating a frozen collection"
if otherRole and self.parent not in v.__dict__[otherRole].items:
v.__dict__[otherRole].items.append(self.parent)
self.items[key]=v
def __contains__(self, v):
return v in self.items.values()
def __delitem__(self,key):
item=self.items[key]
del self.items[key]
(mmtype,multiplicity,otherRole,otherMultiplicity,qualifier, frozen)=self.__mm__
if otherRole:
item.__dict__[otherRole].items.remove(self.parent)
def remove(self,item):
toDelete=None
for k in self.items.keys():
if self.items[k]==item:
toDelete=k
break
if toDelete:
del self[toDelete]
|
|
From: <de...@us...> - 2004-01-07 01:48:30
|
Update of /cvsroot/pymerase/smw/smw/scw/Correctness
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/scw/Correctness
Added Files:
LayerManager.py SfiManager.py __init__.py
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: LayerManager.py ---
#!/usr/bin/env python2
__layer__ = 'Correctness'
import unittest
from smw.scw.Layer import LayerManager as LayerLayerManager
class LayerManager(LayerLayerManager):
pass
--- NEW FILE: SfiManager.py ---
#!/usr/bin/env python2
"""
This layer adds the correctness tag to the elements
"""
__layer__ = 'Correctness'
from smw.metamodel import UML14 as metamodel
from LayerManager import LayerManager
from smw.scw.Layer.SfiManager import SfiManager as LayerSfiManager
class SfiManager(LayerSfiManager):
def newProject(self, projectName=None):
"""
Adds the correctness tag to the project, defaultvalue:'undefined'
"""
project=LayerSfiManager.newProject(self,projectName)
if project:
self.layerManager().attachTag(project,"correctness","undefined")
self.updateUndef(project)
return project
def newLayer(self,anc=None,succ=None,lname=None):
"""
Adds the correctness tag to the layer, defaultvalue:'undefined'
"""
layer=LayerSfiManager.newLayer(self,anc,succ,lname)
if layer:
self.layerManager().attachTag(layer,"correctness","undefined")
self.updateUndef(layer)
return layer
def newClass(self,newName=None):
"""
Adds the correctness tag to the class, defaultvalue:'undefined'
"""
createdClass=LayerSfiManager.newClass(self,newName)
if createdClass:
self.layerManager().attachTag(createdClass,"correctness","undefined")
self.updateUndef(createdClass)
self.attachSuccessorTags(createdClass)
return createdClass
def newPackage(self,newName=None):
"""
Adds the correctness tag to the package, defaultvalue:'undefined'
"""
createdPackage=LayerSfiManager.newPackage(self,newName)
if createdPackage:
self.layerManager().attachTag(createdPackage,"correctness","undefined")
self.updateUndef(createdPackage)
self.attachSuccessorTags(createdPackage)
return createdPackage
def updateUndef(self,ele):
"""
Method for updating all the elements below the created element
"""
while ele.namespace:
ele=ele.namespace
for x in ele.taggedValue:
if x.name=="correctness":
x.dataValue="undefined"
def attachSuccessorTags(self,element):
""" Attaches the correctness tags to all successor (packages,interfaces,classes).
_not_ to layers. """
if not self.layerManager().inLayer(element):
return
if isinstance(element,metamodel.Package):
lpDeps=element.supplierDependency.select( \
lambda x: self.layerManager().isLayerPackageDependency(x))
for d in lpDeps:
p=d.client[0]
if not p.taggedValue.select(lambda x: x.name=="correctness"):
self.layerManager().attachTag(p,"correctness","undefined")
self.updateUndef(p)
self.attachSuccessorTags(p)
if isinstance(element,metamodel.Classifier) \
and not self.layerManager().isTestClass(element):
lGens=element.specialization.select( \
lambda x: isinstance(x.child,type(element))
and x.child.name==element.name
and x.name[0:8]=="layerGen")
for g in lGens:
e=g.child
if not e.taggedValue.select(lambda x: x.name=="correctness"):
self.layerManager().attachTag(e,"correctness","undefined")
self.updateUndef(e)
self.attachSuccessorTags(e)
def loadProject(self,fname):
"""
If the element doesn't have the correctness tag when loading, it adds it.
"""
loader=LayerSfiManager.loadProject(self,fname)
if loader:
ele=self.layerManager().returnElements(loader)
for el in ele:
if (el.oclIsKindOf(metamodel.Package) or el.oclIsKindOf(metamodel.Classifier)) and not self.layerManager().isTestClass(el):
inpp=None
if not (el.oclIsKindOf(metamodel.Model)):
ns=el.namespace
while not ns==loader:
if ns.name=='python2_2':
inpp=1
ns=loader
else:
ns=ns.namespace
if (not inpp or el.oclIsKindOf(metamodel.Model)) and not el.name=="python2_2":
tagNames=[]
for i in el.taggedValue:
tagNames.append(i.name)
if not "correctness" in tagNames:
self.layerManager().attachTag(el,"correctness","undefined")
return loader
--- NEW FILE: __init__.py ---
from SfiManager import *
from LayerManager import *
|
|
From: <de...@us...> - 2004-01-07 01:48:29
|
Update of /cvsroot/pymerase/smw/smw/scw/Element/unittests
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/scw/Element/unittests
Added Files:
__init__.py testLayerManager.py testSfiManager.py
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: __init__.py ---
__all__ = ['testSfiManager', 'testLayerManager']
from testSfiManager import *
from testLayerManager import *
--- NEW FILE: testLayerManager.py ---
#!/usr/bin/env python2
__layer__ = 'Element'
import unittest
from smw.metamodel import UML14 as metamodel
from smw.metamodel.UML14 import *
from smw.scw.Element.LayerManager import *
#from smw.scw.Element.SfiManager import SfiManager
from posixpath import exists
import tempfile
from smw.scw.Project.unittests.testSfiManager import mkUniqueStr
def mkUniqueProjectName():
s = tempfile.mktemp()
s = s + 'SFI_project'
return s
def mkUniqueLayerName():
[...1825 lines suppressed...]
self.assert_(self.lMan.isTestClass(tC),'should be true')
self.assert_(not self.lMan.isTestClass(c),'not true')
# not just tag is tested
c=self.lMan.newClass(self.model,mkUniqueStr())
self.assert_(c,'class was not created')
self.lMan.attachTag(c,'testcase')
self.assert_(not self.lMan.isTestClass(c),'None was not returned')
def testCreateUniqueElementName(self):
N=5
for x in range(N):
c=self.lMan.newClass(self.model,self.lMan.createUniqueElementName(self.model,"class"))
self.assert_(c,'Class was not created.')
self.assert_(c.name=="class"+str(x+1),'Wrong name for the class')
if __name__ == '__main__':
#obj2test=SfiManager()
#LayerManagerObject = LayerManager()
unittest.main()
--- NEW FILE: testSfiManager.py ---
#!/usr/bin/env python2
__layer__ = 'Element'
import unittest
from smw.metamodel import UML14 as metamodel
#from testLayerManager import mkUniqueStr
from smw.scw.Project.unittests.testSfiManager import mkUniqueStr
from smw.scw.Element.SfiManager import SfiManager
from smw.scw.Project.unittests.testSfiManager import testSfiManager as ProjectTestSfiManager
from smw.io import *
from smw.scw.Element.LayerManager import mkTestCaseName,mkTestMethodName
class testSfiManager(ProjectTestSfiManager):
#class testSfiManager(unittest.TestCase):
def setUp(self):
self.sMan = obj2test
[...2069 lines suppressed...]
c=d.client.select(lambda x: x.name==i.name)
self.assert_(c,"Wrong client for the dependency.")
# Some incorrect values:
self.sMan.focusOnElement(project)
items=[None,mkUniqueStr(),lMan.newClass(project,mkUniqueStr())]
c=len(self.sMan.layerManager().returnElements(project))
for i in items:
r=self.sMan.addUnittestDependency(i)
self.assert_(not r, "Dependency was incorrectly created and returned.")
self.assert_(c==len(self.sMan.layerManager().returnElements(project)),"Dependency was added.")
if __name__ == '__main__':
obj2test = SfiManager()
suite = unittest.TestLoader().loadTestsFromTestCase(testSfiManager)
unittest.TextTestRunner().run(suite)
#unittest.main()
|
Update of /cvsroot/pymerase/smw/smw/sart/metamodel
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/sart/metamodel
Added Files:
SART.py SARTModel.smw SARTModel.xml SARTtemplate.py
__init__.py makefile
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: SART.py ---
from __future__ import nested_scopes
import copy
from smw.metamodel.MetaMM import *
MMFullName='SART 0.1'
MMVersion='0.1'
MMName='SART'
class PromptKind(MMEnumeration):
pk_enable=0
pk_trigger=1
description=[u'enable/disable', u'trigger']
class FlowKind(MMEnumeration):
fk_discrete=0
fk_continous=1
description=[u'discrete', u'continous']
[...1089 lines suppressed...]
'flow': (MMClass.kind__Association,ControlFlow,0,'event',0,0),
'state': (MMClass.kind__Association,State,0,'deferrableEvent',0,0),
'store': (MMClass.kind__Association,ControlStore,0,'contents',0,0),
'name': (MMClass.kind__Attribute,Name,1,None,None,0),
'presentation': (MMClass.kind__Composition,PresentationElement,0,'subject',0,0),
'comment': (MMClass.kind__Association,Comment,0,'element',0,0),
'constraint': (MMClass.kind__Association,Constraint,0,'constrainedElement',0,0),
'namespace': (MMClass.kind__Association,Namespace,1,'ownedElement',0,0)
}
Association.__subclasses__=[Flow, DataFlow, ControlFlow, PromptFlow]
Association.__mm__={
'connection': (MMClass.kind__Composition,AssociationEnd,0,'association',1,0),
'name': (MMClass.kind__Attribute,Name,1,None,None,0),
'presentation': (MMClass.kind__Composition,PresentationElement,0,'subject',0,0),
'comment': (MMClass.kind__Association,Comment,0,'element',0,0),
'constraint': (MMClass.kind__Association,Constraint,0,'constrainedElement',0,0),
'namespace': (MMClass.kind__Association,Namespace,1,'ownedElement',0,0)
}
--- NEW FILE: SARTModel.smw ---
SMW_MODEL
METAMODEL smw.metamodel.UML14
PROFILE UML14
(ismw.metamodel.UML14
Model
p1
(dp2
S'isAbstract'
p3
I0
sS'isSpecification'
p4
I0
sS'__uniqueID__'
p5
S'DCE:D712E5F8-CF96-11D6-B84D-0004768CE271'
p6
sS'modulestring'
p7
[...49415 lines suppressed...]
(ismw.metamodel.MetaMM
MMAssociationEnd
p9242
(dp9243
g16
(I3
g79
I0
g80
I0
I0
tp9244
sg20
g76
sg21
g1
sg22
(lp9245
g5869
asbsb.
--- NEW FILE: SARTModel.xml ---
<?xml version='1.0' encoding='ISO-8859-15'?>
<XMI xmi.version='1.1' timestamp='Wed, 06 Nov 2002 10:20:54 +0200'>
<XMI.header>
<XMI.metamodel xmi.name="UML" xmi.version='1.4'/>
</XMI.header>
<XMI.content>
<UML:Model xmi.id='DCE:D712E5F8-CF96-11D6-B84D-0004768CE271' xmi.uuid='DCE:D712E5F8-CF96-11D6-B84D-0004768CE271' isAbstract="false" isSpecification="false" visibility="public" isLeaf="false" isRoot="false" name="UntitledModel">
<UML:Namespace.ownedElement>
<UML:Package xmi.id='DCE:DCA5B0AC-CF96-11D6-B84D-0004768CE271' xmi.uuid='DCE:DCA5B0AC-CF96-11D6-B84D-0004768CE271' isAbstract="false" isSpecification="false" namespace="DCE:D712E5F8-CF96-11D6-B84D-0004768CE271" visibility="public" isLeaf="false" isRoot="false" name="Core">
<UML:Namespace.ownedElement>
<UML:Class xmi.id='DCE:0ECB98DA-CF97-11D6-B84D-0004768CE271' xmi.uuid='DCE:0ECB98DA-CF97-11D6-B84D-0004768CE271' isAbstract="true" isSpecification="false" isRoot="false" visibility="public" name="Element" namespace="DCE:DCA5B0AC-CF96-11D6-B84D-0004768CE271" isActive="false" isLeaf="false">
<UML:GeneralizableElement.specialization>
<UML:Generalization xmi.idref='DCE:0CCFE8A0-CF98-11D6-B84D-0004768CE271'/>
<UML:Generalization xmi.idref='DCE:E255E66A-CFA6-11D6-B84D-0004768CE271'/>
<UML:Generalization xmi.idref='DCE:E28CC630-CFA6-11D6-B84D-0004768CE271'/>
<UML:Generalization xmi.idref='DCE:E28E9262-CFA6-11D6-B84D-0004768CE271'/>
<UML:Generalization xmi.idref='DCE:1D17591E-CFA7-11D6-B84D-0004768CE271'/>
</UML:GeneralizableElement.specialization>
</UML:Class>
[...1533 lines suppressed...]
<UML:Generalization xmi.id='DCE:4B284A3A-CFA6-11D6-B84D-0004768CE271' xmi.uuid='DCE:4B284A3A-CFA6-11D6-B84D-0004768CE271' isSpecification="false" child="DCE:61B9BD6C-CFA4-11D6-B84D-0004768CE271" visibility="public" discriminator="" parent="DCE:1009873E-CF97-11D6-B84D-0004768CE271" name="">
</UML:Generalization>
<UML:Generalization xmi.id='DCE:0FC1C2E8-E64C-11D6-868C-0004768CE271' xmi.uuid='DCE:0FC1C2E8-E64C-11D6-868C-0004768CE271' isSpecification="false" child="DCE:6742C36E-E5AC-11D6-868C-0004768CE271" visibility="public" discriminator="" parent="DCE:5E362900-CFA4-11D6-B84D-0004768CE271" name="">
</UML:Generalization>
<UML:Generalization xmi.id='DCE:4CE3555E-CFA6-11D6-B84D-0004768CE271' xmi.uuid='DCE:4CE3555E-CFA6-11D6-B84D-0004768CE271' isSpecification="false" child="DCE:60D01556-CFA4-11D6-B84D-0004768CE271" visibility="public" discriminator="" parent="DCE:1009873E-CF97-11D6-B84D-0004768CE271" name="">
</UML:Generalization>
<UML:Generalization xmi.id='DCE:E255E66A-CFA6-11D6-B84D-0004768CE271' xmi.uuid='DCE:E255E66A-CFA6-11D6-B84D-0004768CE271' isSpecification="false" child="DCE:A208AA98-CFA6-11D6-B84D-0004768CE271" visibility="public" discriminator="" parent="DCE:0ECB98DA-CF97-11D6-B84D-0004768CE271" name="">
</UML:Generalization>
<UML:Generalization xmi.id='DCE:181D8640-E64C-11D6-868C-0004768CE271' xmi.uuid='DCE:181D8640-E64C-11D6-868C-0004768CE271' isSpecification="false" child="DCE:79338BC6-E5AC-11D6-868C-0004768CE271" visibility="public" discriminator="" parent="DCE:03C2BA06-E5AC-11D6-868C-0004768CE271" name="">
</UML:Generalization>
<UML:Generalization xmi.id='DCE:89BEA7F2-EE33-11D6-9845-0004768CE271' xmi.uuid='DCE:89BEA7F2-EE33-11D6-9845-0004768CE271' isSpecification="false" child="DCE:11545844-CF97-11D6-B84D-0004768CE271" visibility="public" discriminator="" parent="DCE:1009873E-CF97-11D6-B84D-0004768CE271" name="">
</UML:Generalization>
<UML:Generalization xmi.id='DCE:E28CC630-CFA6-11D6-B84D-0004768CE271' xmi.uuid='DCE:E28CC630-CFA6-11D6-B84D-0004768CE271' isSpecification="false" child="DCE:A208AA98-CFA6-11D6-B84D-0004768CE271" visibility="public" discriminator="" parent="DCE:0ECB98DA-CF97-11D6-B84D-0004768CE271" name="">
</UML:Generalization>
<UML:Generalization xmi.id='DCE:187D57EE-E64C-11D6-868C-0004768CE271' xmi.uuid='DCE:187D57EE-E64C-11D6-868C-0004768CE271' isSpecification="false" child="DCE:79338BC6-E5AC-11D6-868C-0004768CE271" visibility="public" discriminator="" parent="DCE:03C2BA06-E5AC-11D6-868C-0004768CE271" name="">
</UML:Generalization>
</UML:Namespace.ownedElement>
</UML:Model>
</XMI.content>
</XMI>
--- NEW FILE: SARTtemplate.py ---
class FlowKind(MMEnumeration):
fk_discrete=0
fk_continous=1
description=[u'discrete', u'continous']
class PromptKind(MMEnumeration):
pk_enable=0
pk_trigger=1
description=[u'enable/disable', u'trigger']
class Transition:
def getDescription(self):
text=''
if self.trigger:
text=self.trigger.name
if self.guard:
text=text+'['+self.guard.guardExpression.body+']'
if self.effect:
text=text+'/'+self.effect.effect.body
return text
class Constraint:
def wfrConstraint1(self):
"A Constraint cannot be applied to itself"
return not(self.constrainedElement.includes(self))
class Classifier:
def getOutgoingAssociationEnds(self):
"Returns the outgoing associationEnds from a Classifier"
return (self.association.select(lambda ae: not (ae.isNavigable)))
def getIncomingAssociationEnds(self):
"Returns the outgoing associationEnds from a Classifier"
return (self.association.select(lambda ae: ae.isNavigable))
def getAssociations(self):
"Returns all associations connected to a Classifier"
myAss=MMSet()
for x in self.association:
myAss.insert(x.association)
return myAss
def getConnectedClassifiers(self):
"Returns all other classifiers connected to this classifier through Flows"
myAss=self.getAssociations()
connected=MMSet()
for x in myAss:
for y in x.connection:
if not (y.participant == self):
connected.insert(y.participant)
return connected
class AssociationEnd:
def wfrAssociationEnd1(self):
"AssociationEnds are unnamed"
return (self.name=="")
class Flow:
def isRefinementFlow(self, refinedElement):
"Returns true if the flow connects a refined element and its refiner"
for x in self.connection:
if refinedElement.includedElements.includes(x.participant):
return 1
return 0
def wfrFlow1(self):
"Flows may not have the same source and target elements"
return (self.connection.forAll(
lambda ae1,ae2: implies((ae1.participant==ae2.participant), ae1==ae2)))
def wfrFlow2(self):
"Flows connected to Stores are unnamed"
return (self.connection.forAll(lambda a: implies(isinstance(a.participant,Store)),
a.participant.name==""))
class FlowModifier:
def existsConnectedDataFlows(self):
"Returns true if there are DataFlows connected to this FlowModifier"
ownAss = MMSet()
for x in self.association:
if x.association.oclIsKindOf(DataFlow):
ownAss.insert(x.association)
return (ownAss.size()>0)
def existsConnectedControlFlows(self):
"Returns true if there are ControlFlows connected to this FlowModifier"
ownAss = MMSet()
for x in self.association:
if x.association.oclIsKindOf(ControlFlow):
ownAss.insert(x.association)
return (ownAss.size()>0)
def existsConnectedPromptFlows(self):
"Returns true if there are PromptFlows connected to this FlowModifier"
ownAss = MMSet()
for x in self.association:
if x.association.oclIsKindOf(PromptFlow):
ownAss.insert(x.association)
return (ownAss.size()>0)
def wfrModifier1(self):
"A FlowModifier can only have one kind of Flows connected to itself"
ownAss = MMSet()
for x in self.association:
ownAss.insert(x.association)
return (ownAss.forAll(lambda a: a.oclIsKindOf(DataFlow))
or ownAss.forAll(lambda a: a.oclIsKindOf(ControlFlow))
or ownAss.forAll(lambda a: a.oclIsKindOf(PromptFlow)))
def wfrModifier2(self):
"A FlowModifier can only have discrete or continous Flows connected to itself"
ownAss = MMSet()
for x in self.association:
ownAss.insert(x.association)
return (ownAss.forAll(lambda a: a.type==FlowKind.fk_discrete)
or ownAss.forAll(lambda a: a.type==FlowKind.fk_continous))
class Split:
def wfrSplit1(self):
"A Split has exactly one incoming and at least two outgoing AssociationEnds"
return ((self.getIncomingAssociationEnds().size()==1) and
(self.getOutgoingAssociationEnds().size()>=2))
class CloneSplit:
def wfrCloneSplit1(self):
"Outgoing flows from a Clonesplits are unnamed"
return((self.getOutgoingAssociationEnds().
forAll(lambda a: a.association.name=="")))
class Join:
def wfrJoin1(self):
"A Join has at least two incoming and exactly one outgoing AssociationEnd"
return ((self.getIncomingAssociationEnds().size()>=2) and
(self.getOutgoingAssociationEnds().size()==1))
class OrJoin:
def wfrOrJoin1(self):
"Incoming flows to an OrJoin are unnamed"
return((self.getIncomingAssociationEnds().
forAll(lambda a: a.association.name=="")))
class Transformation:
def wfrTransformation1(self):
"All Transformations must have both incoming and outgoing Flows"
return (self.getIncomingAssociationEnds().size()>0 and
self.getOutgoingAssociationEnds().size()>0)
class ControlTransformation:
def wfrControlTransformation1(self):
"A ControlTransformation can have only ControlFlows as inputs and outputs"
return (self.association.forAll(
lambda ae: ae.association.oclIsKindOf(ControlFlow)))
class ExternalEntity:
def wfrExternalEntity1(self):
"An ExternalEntity may only be connected to top-level DataTransformations"
return(self.getConnectedClassifiers().
forAll(lambda c: c.oclIsKindOf(DataTransformation) and
c.namespace.oclIsKindOf(Model)))
class DataTransformation:
def wfrDataTransformation1(self):
"A non-abstract DataTransformation can have only DataFlows or PromptFlows as inputs"
if (self.includedElements.size()>0):
return True
else:
return(self.getIncomingAssociationEnds().forAll(
lambda ae: (ae.association.oclIsKindOf(DataFlow)) or
ae.association.oclIsKindOf(PromptFlow)))
class Store:
def wfrStore1(self):
"A Store may only be connected to a Transformation"
return(self.getConnectedClassifiers().forAll
(lambda c: c.oclIsKindOf(Transformation)))
class DataStore:
def wfrDataStore1(self):
"A DataStore may only be connected to DataFlows"
return(self.association.forAll(
lambda ae: ae.association.oclIsKindOf(DataFlow)))
class ControlStore:
def wfrControlStore1(self):
"A ControlStore may only be connected to ControlFlows"
return(self.association.forAll(
lambda ae: ae.association.oclIsKindOf(ControlFlow)))
class PromptFlow:
def wfrPromptFlow1(self):
"A PromptFlow may contain either one event named 'trigger' or two events named 'enable' and 'disable'"
return((self.event.size()==1 and self.event.includes(lambda a: a.name=="trigger")) or
(self.event.size()==2 and self.event.includes(lambda a: a.name=="enable") and
self.event.includes(lambda a: a.name=="disable")))
def wfrPromptFlow2(self):
"A PromptFlow must be discrete"
return (self.type==FlowKind.fk_discrete)
def wfrPromptFlow3(self):
"All PromptFlows are unidirectional"
return (self.connection.forAll(
lambda ae1,ae2: implies((ae1.isNavigable == ae2.isNavigable),ae1==ae2)))
class CompositeState:
def wfrCompositeState1(self):
"A composite state can have at most one initial vertex"
return self.subvertex.select(
lambda v: v.oclIsKindOf(Pseudostate) and v.kind== PseudostateKind.pk_initial).size() <=1
def wfrCompositeState2(self):
"A composite state can have at most one deep history vertex"
return self.subvertex.select(
lambda v: v.oclIsKindOf(Pseudostate) and v.kind== PseudostateKind.pk_deepHistory).size() <=1
def wfrCompositeState3(self):
"A composite state can have at most one shallow history vertex"
return self.subvertex.select(
lambda v: v.oclIsKindOf(Pseudostate) and v.kind== PseudostateKind.pk_shallowHistory).size() <=1
def wfrCompositeState4(self):
"There have to be at least two composite substates in a concurrent composite state"
return implies(self.isConcurrent,
self.subvertex.select(lambda v:
v.oclIsKindOf(CompositeState)).size()>=2)
def wfrCompositeState5(self):
"A concurrent state can only have composite states as substates"
return implies(self.isConcurrent,
self.subvertex.forAll(lambda s:
s.oclIsKindOf(CompositeState)))
def wfrCompositeState6(self):
"The substates of a composite state are part of only that composite state"
return self.subvertex.forAll(lambda s: s.container.asSet().size()==1 and s.container == self)
class FinalState:
def wfrFinalState1(self):
"A final state cannot have any outgoing transitions"
return self.outgoing.size()==0
class Pseudostate:
def wfrPseudostate1(self):
"An initial vertex can have at most one outgoing transition and no incoming transitions"
return implies(self.kind == PseudostateKind.pk_initial,
self.outgoing.size()<=1 and self.incoming.isEmpty())
def wftPseudostate2(self):
"History vertices can have at most one outgoing transition"
return implies(self.kind == PseudostateKind.pk_deepHistory or self.kind== PseudostateKind.pk_shallowHistory,
self.outgoing.size()<=1)
--- NEW FILE: __init__.py ---
"""
SMW The System Modeling Workbench
Copyright 2001,2002 by Ivan Porres ip...@ab...
The System Modeling Workbench is a collection of tools for
modeling software systems. From the programmer's point of view,
each supported modeling language is represented by a metamodel
module. A metamodel module contains a Python class for each model
element. These classes have the same attributes and associations
with the same name as in the metamodel of the modeling language.
Since the model elements are represented as Python classes, we
create a models by instantiating new objects and manipulating its
associations.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
"""
--- NEW FILE: makefile ---
SART.py: SARTModel.xml ../../mmgen/mmgen.py
python2 ../../mmgen/mmgen.py --uml SARTModel.xml SART.py SART 0.1 SARTtemplate.py
|
|
From: <de...@us...> - 2004-01-07 01:48:23
|
Update of /cvsroot/pymerase/smw/smw/repository/gui
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/repository/gui
Added Files:
RepositoryList.py TagHistory.py __init__.py
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: RepositoryList.py ---
from qt import *
class RepositoryList(QDialog):
def __init__(self,parent = None,name = None,modal = 0,fl = 0):
QDialog.__init__(self,parent,name,modal,fl)
self.setCaption(self.trUtf8("List of Repositories"))
self.bgroup = QVButtonGroup(self, "bgroup")
self.bgroup.setRadioButtonExclusive(1)
self.buttons = []
def setDatabases(self, dbs):
for i in dbs:
button = QRadioButton(self.bgroup, i)
button.setText(self.trUtf8(i))
button.setChecked(0)
self.connect(button, SIGNAL("clicked()"), self, SLOT("accept()"))
self.buttons.append(button)
self.bgroup.adjustSize()
self.show()
--- NEW FILE: TagHistory.py ---
#!/usr/bin/python
#
# Displays the tag/branch history as a graphical tree.
# The information is returned by aUMLApp.py/RepViewTagTree().
#
#
import operator
import re
from qt import *
try:
from qtcanvas import *
except:
pass
import dlg.jointags
import dlg.tag_information
def createTexts(canvas, texts):
all = []
for i in texts:
q = QCanvasText(QString(i), canvas)
q.show()
all.append(q)
return all
class TagHistoryItem(QCanvasRectangle):
"""One "box" in the Canvas containing one tag from the repository."""
def __init__(self, x,y,z,canvas, tagname, revision, whocheckedin, comment, datestamp):
self.children = []
self.parents = []
self.canvas = canvas
self.revision = revision
self.tagname = tagname
self.committer = whocheckedin
self.comment = comment
# Skip the subsecond part. This is a bit clumsy
datestamp = re.sub("\..+", "", datestamp)
self.datestamp = datestamp
QCanvasRectangle.__init__(self,x,y,100,100,canvas)
QCanvasRectangle.setZ(self, z)
self.childrenlines = {}
self.texts = createTexts(canvas, [tagname, str(revision), whocheckedin, datestamp])
# Calculate bounding box of texts
itemwidth = max(map(lambda x: x.boundingRect().width(), self.texts))
itemwidth += 30
itemheight = reduce(operator.add, map(lambda x: x.boundingRect().height(), self.texts))
itemheight += self.texts[0].boundingRect().height()
self.setSize(itemwidth, itemheight)
self.show()
def __update_line_points__(self, line, child):
line.setPoints(self.x() + self.width()/2,
self.y(),
child.x() + child.width()/2,
child.y() + child.height())
def update_lines(self, recurse = 1):
# Lines to children, create if not yet done
for c in self.children:
# Update all the parents lines also
if recurse:
for p in c.parents:
p.update_lines(0)
if not self.childrenlines.has_key(c):
self.childrenlines[c] = QCanvasLine(self.canvas)
self.__update_line_points__(self.childrenlines[c], c)
# same tag is colored
if self.tagname == c.tagname:
self.childrenlines[c].setPen(QPen(QColor(150, 0 , 0), 2))
self.childrenlines[c].show()
elif recurse:
self.__update_line_points__(self.childrenlines[c], c)
def update(self):
QCanvasRectangle.update(self)
x = self.x()
y = self.y()
width = self.width()
for i in self.texts:
r = i.boundingRect()
nx = x + (width - r.width())/2
ny = y + r.height()/5
i.move(nx, ny)
i.update()
i.show()
y = ny + r.height()
self.update_lines()
def drawShape(self, painter):
self.update()
QCanvasRectangle.drawShape(self,painter)
class TagHistoryCanvasView(QCanvasView):
"""Displays the Canvas of TagHistoryItems and provides the
operations on tags."""
def __init__(self, repositorymanager, canvas, parent, name):
QCanvasView.__init__(self, canvas, parent, name)
self.repositorymanager = repositorymanager
self.resize(parent.size())
self.setVScrollBarMode(QScrollView.AlwaysOn)
self.setHScrollBarMode(QScrollView.AlwaysOn)
#self.viewport().setMouseTracking(1)
self.viewport().setFocusProxy(self)
self.viewport().setFocusPolicy(QWidget.ClickFocus)
# Items chosen
self.chosen = []
self.pan = 0
def contentsMouseReleaseEvent(self, event):
if event.button() & Qt.MidButton:
self.pan = 0
# If we didn't move the mouse too much
if self.delta[0] + self.delta[1] <= 5:
choice = self.onTag(event)
if choice:
return self.showComment(choice)
def contentsMouseMoveEvent(self, event):
if not self.pan:
return
speed = 3
dx = (event.x() - self.startCoords[0])
dy = (event.y() - self.startCoords[1])
self.delta = (self.delta[0] + abs(dx), self.delta[1] + abs(dy))
dx *= speed
dy *= speed
cx = self.contentsX()
cy = self.contentsY()
canvas = self.canvas()
# We have to make sure new scroll position is ok, otherwise
# we get a "shaky" movement
if cx + dx < 0:
dx = -cx
if cx + dx + self.visibleWidth() > canvas.width():
dx = canvas.width() - cx - self.visibleWidth()
if cy + dy < 0:
dy = -cy
if cy + dy + self.visibleHeight() > canvas.height():
dy = canvas.height() - cy - self.visibleHeight()
self.setContentsPos(cx + dx, cy + dy)
# Reset the start value.
self.startCoords = (event.x() + dx, event.y() + dy)
#### Callbacks for the menu operations
### JOINING TAGS
def joinTags(self):
newbranch = None
if self.jointagsgui.revision1.isOn():
newbranch = self.t_one.tagname
elif self.jointagsgui.revision2.isOn():
newbranch = self.t_two.tagname
elif self.jointagsgui.newbranch.isOn():
newbranch = self.jointagsgui.newbranchedit.text().__str__()
if not newbranch or len(newbranch) == 0:
self.jointagsgui.reject()
return
base_rev = -1
# Try if user had proper revision
t = self.jointagsgui.base_tag_revision.text().__str__()
try:
base_rev = int(t)
except:
pass
assert(newbranch)
# BUG lacks comment
self.repositorymanager.repositoryserver.joinTags(self.t_one.revision, self.t_two.revision, newbranch, base_rev)
self.jointagsgui.reject()
def joinTagsActivateRadioButton(self):
self.jointagsgui.newbranch.setOn(1)
def joinTagsGUI(self):
self.jointagsgui = dlg.jointags.jointags(self.parent(), None, 1)
self.jointagsgui.connect(self.jointagsgui.okbutton, SIGNAL('clicked()'), self.joinTags)
self.jointagsgui.connect(self.jointagsgui.newbranchedit, SIGNAL('returnPressed()'), self.joinTags)
self.jointagsgui.connect(self.jointagsgui.newbranchedit, SIGNAL('textChanged(const QString&)'), self.joinTagsActivateRadioButton)
# Bug translate
b1 = u"Branch %s (after revision %d)" % (self.t_one.tagname, self.t_one.revision)
b2 = u"Branch %s (after revision %d)" % (self.t_two.tagname, self.t_two.revision)
self.jointagsgui.revision1.setText(str(b1))
self.jointagsgui.revision2.setText(str(b2))
self.jointagsgui.show()
#### The menu and canvas functions
def onTag(self, e):
itemlist = self.canvas().collisions(e.pos())
for i in itemlist:
if isinstance(i, QCanvasRectangle):
return i
return None
def showMenu(self, e):
"""Show a menu displaying the different actions that can
be done to the tags."""
choice = self.onTag(e)
# The tag under the mouse is added if it isn't
# active yet. This just feels intuitive to the user, I hope.
add_extra = 0
if choice:
if choice not in self.chosen:
if len(self.chosen) < 3:
self.chosen.append(choice)
add_extra = 1
else:
# Rearrange so the tag under the mouse is the first one
# Again, hopefully feels more intuitive
# Note that we don't set add_extra, because this tag
# was already chosen by the user.
self.chosen.remove(choice)
self.chosen.append(choice)
# Reverse so we have latest-first
self.chosen.reverse()
taglen = len(self.chosen)
if taglen > 0:
self.t_one = t_one = self.chosen[0]
if taglen > 1:
self.t_two = t_two = self.chosen[1]
if taglen > 2:
self.t_three = t_three = self.chosen[2]
self.chosen.reverse()
if add_extra:
self.chosen.pop()
self.menu = QPopupMenu(self, "Tag Operations")
# Add different menus depending on how many
# tags are chosen
if taglen > 0:
id_update = self.menu.insertItem("N/A Update model to revision %d" % t_one.revision )
id_diff_two_model = self.menu.insertItem("N/A Show difference between model and revision %d" % t_one.revision )
else:
id_update = self.menu.insertItem("N/A Update model to a revision")
id_diff_two_model = self.menu.insertItem("N/A Show difference between model and a revision")
self.menu.setItemEnabled(id_update, 0)
self.menu.setItemEnabled(id_diff_two_model, 0)
if taglen > 1:
id_diff_two = self.menu.insertItem("N/A Show difference between revisions %d and %d" % (t_one.revision, t_two.revision ))
id_jointags = self.menu.insertItem("Join revisions %d and %d..." % (t_one.revision, t_two.revision), self.joinTagsGUI)
id_diff_three_model = self.menu.insertItem("N/A Show three-way difference between revisions %d, %d and model" % (t_one.revision, t_two.revision))
else:
id_diff_two = self.menu.insertItem("N/A Show difference between two revisions")
id_jointags = self.menu.insertItem("Join two revisions")
id_diff_three_model = self.menu.insertItem("N/A Show three-way difference between two revisions and model")
self.menu.setItemEnabled(id_diff_two, 0)
self.menu.setItemEnabled(id_diff_three_model, 0)
self.menu.setItemEnabled(id_jointags, 0)
if taglen > 2:
id_diff_three = self.menu.insertItem("N/A Show three-way difference between revisions %d, %d and %d" % (t_one.revision, t_two.revision, t_three.revision ))
else:
id_diff_three = self.menu.insertItem("N/A Show three-way difference between three revisions")
self.menu.setItemEnabled(id_diff_three, 0)
# Show at mouse position
x = e.pos().x() - self.contentsX()
y = e.pos().y() - self.contentsY()
self.menu.popup(self.mapToGlobal(QPoint(x, y)))
def showComment(self, item):
"""Shows new window with more information about the tag."""
ti = dlg.tag_information.TagInformation(self, None, 0)
ti.revision.setText(str(item.revision))
ti.branchname.setText(str(item.tagname))
ti.committer.setText(str(item.committer))
ti.date.setText(str(item.datestamp))
ti.comment.setText(str(item.comment))
# Make shorter, according to comment height
size = ti.comment.size()
h = ti.comment.heightForWidth(size.width()) + ti.comment.horizontalScrollBar().height() + 5 # The +5 is for letter below baseline
ti.comment.resize(size.width(), h)
ti.show()
def contentsMousePressEvent(self, e):
"""Takes care of selecting / unselecting tags."""
# Right button shows menu of options
if e.button() == Qt.RightButton:
return self.showMenu(e)
# Show comment of a tag
# BUG Windows/Mac users.
if e.button() == Qt.MidButton:
# PAN THE VIEW INSTEAD
self.startCoords = (e.x(), e.y())
self.delta = (0,0)
self.pan = 1
return
# Left mouse button, select/deselect tags
choice = self.onTag(e)
if not choice:
return None
if choice in self.chosen:
self.chosen.remove(choice)
color = QColor(0,0,0)
else:
# No more than 3 chosen items
if len(self.chosen) >= 3:
return None
self.chosen.append(choice)
color = QColor(100, 100, 255)
choice.setPen(QPen(color))
self.canvas().update()
return None
class TagHistory(QDialog):
"""Main class which displays the window with the given tag history information.
Builds up a tree and puts the tags into good places.
Currently, the placing algorithm doesn't work nicely for joined tags.
There also is a small glitch when narrow tags are the only children(?)."""
def __init__(self, repositorymanager, history, taginfo, parent = None,name = None,modal = 0,fl = 0):
QDialog.__init__(self,parent,name,modal,fl)
self.repositorymanager = repositorymanager
if name == None:
self.setName('taghistory')
# maximum height of a certain tag level
self.levels = {}
self.dist_between_generations = 30
self.resize(596,480)
self.setCaption(self.tr("Complete Tag History"))
self.canvas = QCanvas()
self.canvas.setDoubleBuffering(0)
self.cv = TagHistoryCanvasView(repositorymanager, self.canvas, self, "TagHistoryView")
self.historyhash = history
self.taginfo = taginfo
self.all_items = {}
(width, height) = self.createTopology()
self.canvas.resize(width, height)
self.update()
self.canvas.setAllChanged()
self.canvas.update()
self.cv.show()
def resizeEvent(self, QResizeEvent):
"""Resizes the QCanvasView self.cv along with the
dialog resizing."""
self.cv.resize(self.size())
def __create_item__(self, revision, historystart):
if not self.all_items.has_key(revision):
datestamp = historystart[0]
uuid = historystart[1]
whocheckedin = historystart[2]
comment = historystart[3]
self.all_items[revision] = TagHistoryItem(0, 0, 0, self.canvas, self.taginfo[uuid], revision, whocheckedin, comment, datestamp)
return self.all_items[revision]
##
## ALGORITHM FOR THE PLACEMENT OF TAGHISTORYITEMS
##
##* Get list of tag revisions and their children
## * hash children[parentrevision] = list-of-children
## * hash parent[childrevision] = list-of-parents
##* Initialize
## * branches = []
## * location[revision] = {}
##Then we do a topological walktrough of the tags
##* Initialize
## * frontier = [ 1 ], contains the list of tags which we want to
## check
##* While we can take the first tag (basically, any tag) from frontier as
## our current tag
## * If current is already in location, continue with next tag
## * Get list of current's parents
## * If all parents are already in location
## * Create a new item, based on current
## * GFX: y position is the lowest parent's y position minus the distance-between-revisions
## * Add to location
## * If current has the same name as any of its parents,
## and that parent has not continued its' branch,
## => continue on that branch
## * GXF: x position is the new branch's x position
## * Otherwise, create a new branch
## * Allocate x position to the new branch
## * Add all current's children to frontier
##
def createTopology(self):
# Revision one has no parents
parents = { 1: []}
children = {}
# Create the children and parents hashes
for tagrev in self.historyhash.keys():
children[tagrev] = self.historyhash[tagrev][4:]
for child in children[tagrev]:
if not parents.has_key(child):
parents[child] = []
parents[child].append(tagrev)
branches = []
location = {}
frontier = [ 1 ]
while len(frontier) > 0:
current = frontier.pop(0)
if location.has_key(current):
continue
all_parents_exist = 1
for p in parents[current]:
if not location.has_key(p):
all_parents_exist = 0
break
if not all_parents_exist:
continue
item = self.__create_item__(current, self.historyhash[current])
# The 0 is the initial placement of revision 1
# Everything will be translated up anyway, so there's
# nothing to worry about
y = reduce(min, map(lambda p: location[p].y(), parents[current]), 0)
# Move child slightly lower then lowest parent
y = y - item.height() * 1.5
location[current] = item
# If there are graphical mistakes anywhere, it's here...
has_same_name = 0
my_parent = None
for p in parents[current]:
item.parents.append(location[p])
if location[p].tagname == item.tagname:
my_parent = location[p]
# Has this parent continued its branch?
for c in children[p]:
citem = self.__create_item__(c, self.historyhash[c])
if citem.tagname == item.tagname:
has_same_name += 1
if has_same_name != 1:
# Create new branch
if current == 1:
assert(my_parent == None)
x = 0 # Initial placement of revision 1
else:
x = branches[-1].x() + item.width()*1.3 # Distance between branches
item.move(x, y)
branches.append(item)
else:
# Continue on old branch
midx = my_parent.x() + my_parent.width() / 2
item.move(midx - item.width() / 2, y)
for child in children[current]:
citem = self.__create_item__(child, self.historyhash[child])
item.children.append(citem)
frontier.append(child)
# TRANSLATE
# Since revision 1 started at (0,0), all items are
# beyond the canvas
minx = min(map(lambda item: item.x(), location.values()))
miny = min(map(lambda item: item.y(), location.values()))
# The +50 makes the tags go slight away from the topleft edge
EDGE = 50
map(lambda item: item.moveBy(-minx + EDGE, -miny + EDGE), location.values())
map(lambda item: item.update(), location.values())
# Simplistic way to calculate width and height
width = max(map(lambda item: item.x() + item.width(), location.values()))
height = max(map(lambda item: item.y() + item.height(), location.values()))
return (width + EDGE, height + EDGE)
--- NEW FILE: __init__.py ---
|
|
From: <de...@us...> - 2004-01-07 01:48:22
|
Update of /cvsroot/pymerase/smw/smw/repository/db/unittest
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/repository/db/unittest
Added Files:
__init__.py testCreateDatabase.py
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: __init__.py ---
--- NEW FILE: testCreateDatabase.py ---
#
# Tests creating a UML 1.4 database. Destroys it afterwards.
# This is a very simple test, and basically it is already tested
# by several other tests implicitly.
#
import os
import sys
try:
user = os.environ["USER"]
except:
user = "noname"
if user != "maalanen":
print "Can't test createdbtest.py"
sys.exit(0)
from smw.repository.db.dbback import *
delete_database("test", "maalanen", "merknitz")
create_database("test", "smw.metamodel.UML14", "maalanen", "merknitz")
|
|
From: <de...@us...> - 2004-01-07 01:48:22
|
Update of /cvsroot/pymerase/smw/smw/modeler/plugins
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/modeler/plugins
Added Files:
__init__.py repoPlugin.py transPlugin.py
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: __init__.py ---
--- NEW FILE: repoPlugin.py ---
import qt
import sys
import copy
import smw.repository.release
from smw.ipmanager import IPManager
IPManager().registerIPModule(smw.repository.release)
from smw.Project import getProjectInstance
from smw.repository.gui.dlg import repmain
from smw.repository.gui.RepositoryList import RepositoryList
from smw.repository.gui.dlg.create_new_repo import CreateNewRepo
from smw.metamodel.MetaMM import getMetamodelByName, getElementsOfModel, modelcopy
from smw import io
from xmlrpclib import ServerProxy
from os import environ
from smw.repository.gui.TagHistory import *
from smw.repository.gui.dlg.commentedit import *
from smw import exceptions
from smw import log
from smw.modeler import iconcache
from smw.repository.gfx_resolver import GfxResolver
from smw import SignalHandling
from smw import Configuration
import re
therepmanager = None
class RepositoryManagerPlugin:
def __init__(self,modelerApp):
global therepmanager
therepmanager = self
self.modelerApp=modelerApp
self.config=Configuration.Configuration()
self.repolog = log.getLogger("Repository")
self.repositoryserver = None
i = {}
i["user"] = environ.get("USER", "anonymous")
i["branch"] = "Main"
i["revision"] = 0
i["server"] = "localhost"
i["repository"] = "repository"
i["port"] = str(self.config.getParameter("smw_server_default_port"))
i["sharedelement"] = ""
self.info = i
i["password"] = ""
# Use these keys if given
self.only_module = None
self.favour_rev_instead_of_branchname = 0
#
# This contains the unmodified model that we have received
# from the repository. It is needed for proper client-side
# diff3/patch3, as well as checkin-by-modeldifference.
#
self.checked_out_model = None
SignalHandling.registerReceiver("savedModel", self.slotSavedModel)
def __del__(self):
SignalHandling.unregisterReceiver("savedModel", self.slotSavedModel)
def slotSavedModel(self, signal, privateparams, params):
h = params["toupdate"]
if not h.has_key("revision"):
# No versioned model, what to do?
return
if h.has_key("branch"):
self.info["branch"] = h["branch"]
self.info["revision"] = h["revision"]
self.updateGUI()
h = self.__get_vars__()
self.modelerApp.project.fileName = io.create_url(h)
self.modelerApp.updateCaption()
self.comment = ""
def repositoryManagement(self):
self.cRep = repmain.repmain(self.modelerApp, "Repository Main Window", 0)
self.cRep.connect(self.cRep.checkin, qt.SIGNAL('clicked()'), self.RepCheckin)
self.cRep.connect(self.cRep.checkout, qt.SIGNAL('clicked()'), self.RepCheckout)
self.cRep.connect(self.cRep.update, qt.SIGNAL('clicked()'), self.RepUpdate)
self.cRep.connect(self.cRep.viewtagtree, qt.SIGNAL('clicked()'), self.RepViewTagTree)
self.cRep.connect(self.cRep.editcomment, qt.SIGNAL('clicked()'), self.editComment)
self.cRep.connect(self.cRep.addmodule, qt.SIGNAL('clicked()'), self.RepAddModule)
self.cRep.connect(self.cRep.list_repositories, qt.SIGNAL('clicked()'), self.RepGetListOfRepositories)
self.cRep.connect(self.cRep.create_new_repository, qt.SIGNAL('clicked()'), self.RepCreateNewRepository)
self.updateGUI()
self.cRep.show()
def updateGUI(self, h = None):
if h == None:
h = self.info
self.cRep.user.setText(h["user"])
self.cRep.tag.setText(h["branch"])
repotext = str(h["revision"])
if h["revision"] == 0: repotext = "Latest"
self.cRep.revision.setText(repotext)
self.cRep.server.setText(h["server"])
self.cRep.port.setText(h["port"])
self.cRep.repository.setText(h["repository"])
self.cRep.moduleid.setText(h.get("sharedelement", ""))
self.cRep.password.setText(h["password"])
if self.favour_rev_instead_of_branchname:
self.cRep.revision_radio_button.setChecked(1)
else:
self.cRep.branch_radio_button.setChecked(1)
self.comment = ""
setme = 1
if h != self.info:
setme = 0
self.cRep.update.disconnect(self.cRep.update, qt.SIGNAL('clicked()'), self.RepUpdate)
self.cRep.connect(self.cRep.update, qt.SIGNAL('clicked()'), self.cRep, SLOT("accept()"))
self.cRep.checkin.setEnabled(setme)
self.cRep.checkout.setEnabled(setme)
self.cRep.viewtagtree.setEnabled(setme)
self.cRep.editcomment.setEnabled(setme)
self.cRep.addmodule.setEnabled(setme)
self.cRep.list_repositories.setEnabled(setme)
self.cRep.create_new_repository.setEnabled(setme)
#self.cRep..setEnabled(setme)
#self.cRep..setEnabled(setme)
def editComment(self):
cw = CommentEdit(self.cRep, None, 1)
cw.edit.setText(self.comment)
cw.exec_loop()
if cw.result() == qt.QDialog.Accepted:
self.comment = str(cw.edit.text())
def RepGetServer(self, authenticate = 1):
# BUG: this should be cached if possible
self.repositoryserver = None
h = self.__get_vars__()
url = io.create_url(h)
self.repolog.debug("Contacting repository at url %s" % url)
try:
self.repositoryserver = io.connect_to_server(url, authenticate)
except:
# Connection failed
print "Error %s:%s" % (sys.exc_type, sys.exc_value)
self.repositoryserver = None
qt.QMessageBox.critical(self.cRep,
"Communication Error",
"%s. Please check with your server administrator." % sys.exc_value)
raise
def __get_vars__(self, save = 1):
"""Reads the GUI variables and returns them in a hash"""
port = str(self.cRep.port.text())
server = str(self.cRep.server.text())
repository = str(self.cRep.repository.text())
tag = str(self.cRep.tag.text())
revision = str(self.cRep.revision.text())
rev = 0
# Check whether branch or revision was active
if not self.cRep.revision.isEnabled():
revision = 0
else:
tag = ""
try:
rev = int(revision)
except:
# BUG maybe we should show error dialog and say that
# only numbers are allowed?
pass
user = str(self.cRep.user.text())
password = str(self.cRep.password.text())
module_uuid = str(self.cRep.moduleid.text())
h = {"branch": tag,
"port": port,
"repository": repository,
"revision": rev,
"server": server,
"password": password,
"user": user,
"comment": self.comment }
if len(module_uuid) > 0:
h["sharedelement"] = module_uuid
if not self.cRep.updatetag.isChecked():
newtag = str(self.cRep.newtag.text())
# BUG should display error window
assert(newtag != "")
h["newtag"] = newtag
if save:
# Save the variables so they are not reset
# across frame open/close
self.info = copy.copy(h)
return h
def RepUpdate(self):
assert(self.checked_out_model != None)
h = self.__get_vars__()
# We are not interested in the addmodule part when updating
if h.has_key("sharedelement"):
del h["sharedelement"]
url = io.create_url(h)
m = self.modelerApp.project.getRoot()
resolution = io.updateModel(url, m, self.checked_out_model)
# No conflicts
if resolution[0] == 0:
(_, m, new_checked_out_model, new_revision) = resolution
# Conflicts
elif resolution[0] == 1:
(_, currentmodel, new_checked_out_model, new_revision, change_this_md, this_md_already_applied) = resolution
g = GfxResolver(self.cRep, currentmodel, change_this_md, this_md_already_applied)
g.exec_loop()
if g.result() != qt.QDialog.Accepted:
self.cRep.reject()
new_model = g.getNewModel()
else:
assert(0)
self.modelerApp.project.setRoot(m)
self.checked_out_model = new_checked_out_model
self.info["revision"] = str(new_revision)
h["revision"] = self.info["revision"]
self.modelerApp.project.fileName = io.create_url(h)
self.modelerApp.updateCaption()
self.cRep.reject()
# BUG refresh display
def RepCheckin(self):
h = self.__get_vars__()
# We are not interested in the addmodule part when saving
if h.has_key("sharedelement"):
del h["sharedelement"]
url = io.create_url(h)
try:
getProjectInstance().saveModel(url, h)
except exceptions.NoSuchTag:
pass
else:
self.repolog.debug("Checking in branch " + str(self.info["branch"]) + " at revision " + str(self.info["revision"]))
self.favour_rev_instead_of_branchname = 1
self.cRep.reject()
def RepCheckout(self):
h = self.__get_vars__()
if h.has_key("sharedelement"):
del h["sharedelement"]
url = io.create_url(h)
self.repolog.debug("Checking out tag " + str(self.info["branch"]) + " at revision " + str(self.info["revision"]))
try:
self.modelerApp.openProject(url, h)
except Exception:
self.favour_rev_instead_of_branchname = 0
self.repolog.exception("Repository checkout error")
qt.QMessageBox.warning(self.cRep,
"Repository Checkout Error",
"Couldn't checkout from the repository.\n")
else:
# Success in checking out
# Take a copy for diff3/patch
self.checked_out_model = modelcopy(self.modelerApp.project.getRoot())
self.info["branch"] = h["branch"]
self.info["revision"] = h["revision"]
u = io.create_url(h)
self.modelerApp.project.fileName = io.getDisplayUrl(u)
self.modelerApp.updateCaption()
self.favour_rev_instead_of_branchname = 1
self.cRep.reject()
def RepViewTagTree(self):
self.RepGetServer()
a = self.repositoryserver.getWholeHistory()
history = a[0]
taginfo = a[1]
rev = 0
hash = {}
for i in history:
if type(i) == list:
hash[rev] = i
else:
rev = i
taghash = {}
for i in taginfo: taghash[i[1]] = i[0]
self.repolog.debug(hash)
self.repolog.debug(taghash)
self.taghistory = TagHistory(self, hash, taghash, self.cRep, "Complete Tag History", 0)
self.taghistory.show()
def RepAddModule(self):
self.repolog.debug("AddModule()")
h = self.__get_vars__(0)
url = io.create_url(h)
if not h.has_key("sharedelement"):
qt.QMessageBox.warning(self.cRep,
"Invalid Module ID",
"You must supply a module id. It is a string corresponding to the XMI id of the element you want to import.")
return
self.repolog.debug("Adding module from URL %s" % url)
# BUG we might not have an "ownedElement" composition
myset = self.modelerApp.diagramEditor.editorTab.currentPage().focus.ownedElement
# This just places it in the root element
# myset = self.modelerApp.project.getRoot().ownedElement
io.loadModule(url, myset)
# BUG refresh display
self.cRep.reject()
def RepGetListOfRepositories(self):
self.RepGetServer(0)
databases = self.repositoryserver.getRepositories(self.info["user"], self.info["password"])
databases.sort()
r = RepositoryList(self.modelerApp, None, 1)
r.setDatabases(databases)
r.exec_loop()
if r.result() == qt.QDialog.Accepted:
print "accepted"
button = r.bgroup.selected()
if not button:
return
print "set button"
self.cRep.repository.setText(button.text())
def RepCreateNewRepository(self):
r = CreateNewRepo(self.modelerApp, None, 1)
r.exec_loop()
if r.result() == qt.QDialog.Accepted:
self.RepGetServer(0)
self.repositoryserver.createRepository(str(r.repository_name.text()), str(r.metamodel.text()), self.info["user"], self.info["password"])
# lame hack
__my_element__ = None
def updateModule(self):
global therepmanager
print "should update module"
element = __my_element__
url = element.subject[0].getModule()
h = io.get_url_keys_and_values(url)
print "url ", url
therepmanager.repositoryManagement()
therepmanager.updateGUI(h)
therepmanager.cRep.exec_loop()
if therepmanager.cRep.result() == qt.QDialog.Accepted:
h = therepmanager.__get_vars__(0)
url = io.create_url(h)
# No need to catch the new element,
# since it isn't the top-level Model
(_, _, _, newrevision) = io.updateModel(url, element.subject[0], 0)
h["revision"] = newrevision
element.subject[0].setModule(io.getDisplayUrl(io.create_url(h)))
def updateMenu(signame, None, data):
element = data["element"]
contextMenu = data["menu"]
global __my_element__
__my_element__ = element
# "Update module" entry
if element and element.subject[0].isModule():
m = element.subject[0].getModule()
contextMenu.insertSeparator()
# '&' chars are removed by qt, so make them &&
m = re.sub("&", "&&", m)
id = contextMenu.insertItem(
qt.QIconSet(iconcache.getIcon('repository')),
"Update module (url is %s)" % m, updateModule)
# The editor calls the register method to allow the module to
# install new actions, etc...
#
# register should instanciate the actual plugin and return it to
# the editor
def register(modelerApp):
# preferences
repopref=[
Configuration.StringParameter("module_color",
"RGB color for a module",
(255,70,70)),
Configuration.StringParameter("module_color_light",
"light RGB color for a module",
(255,130,130))
]
config=Configuration.Configuration()
for p in repopref:
config.registerParameter(p)
# create the plugin object
manager=RepositoryManagerPlugin(modelerApp)
# register a new action 'repositoryManagment'
# with a fancy name and icon.
# when the user activates the action, manager.repositoryManagement
# will be called
# the action belongs to the group 'modeler', since it is a global action
# other groups are 'project' that is only active when a project is loaded
# and 'selection' that is only active when some items are selected
modelerApp.actions.registerAction(
"repositoryManagement","Repository Management...",
qt.QIconSet(iconcache.getIcon("repository")),
0,manager,manager.repositoryManagement,"modeler")
# Tell the application to place the icon and menu option just after the
# openProject action. (The editor will try to do its best, but maybe the
# place is already taken by another plugin)
modelerApp.actions["repositoryManagement"].pleaseShowAfter(
modelerApp.actions["openProject"])
modelerApp.actions["repositoryManagement"].setEnabled(1)
SignalHandling.registerReceiver("MenuPopup", updateMenu, None)
return manager
--- NEW FILE: transPlugin.py ---
import qt
from smw.metamodel.UML14 import *
from smw.modeler.TransEditor import *
from smw.modeler.DialogEditor import *
from smw.modeler.DiagramEditor import *
from smw.transform.editormtr import *
from smw import Configuration
import string
import sys
import traceback
import copy
import codecs
class TEditor:
"""
Transformation Editor
"""
def __init__(self,modelerApp):
self.modelerApp=modelerApp
self.editor = 0
def teditor(self):
if not self.editor:
self.editor = TransformationDlg(self.modelerApp, "Transformation Main Window", 0)
self.editor.show()
def updateMenu(signame, None, data):
element = data["element"]
contextMenu = data["menu"]
global __my_element__
__my_element__ = element
# "Update module" entry
if element and element.subject[0].isModule():
m = element.subject[0].getModule()
contextMenu.insertSeparator()
# '&' chars are removed by qt, so make them &&
m = re.sub("&", "&&", m)
id = contextMenu.insertItem(
qt.QIconSet(iconcache.getIcon('repository')),
"Update module (url is %s)" % m, updateModule)
# The editor calls the register method to allow the module to
# install new actions, etc...
#
# register should instanciate the actual plugin and return it to
# the editor
def register(modelerApp):
# create the plugin object
t = TEditor(modelerApp)
modelerApp.actions.registerAction(
"trans","Transformation...",
qt.QIconSet(iconcache.getIcon("pluginManager")),
0,t,t.teditor,"modeler")
# Tell the application to place the icon and menu option just after the
# pluginManager action. (The editor will try to do its best, but maybe the
# place is already taken by another plugin)
modelerApp.actions["trans"].pleaseShowAfter(
modelerApp.actions["pluginManager"])
modelerApp.actions["trans"].setEnabled(1)
return t
|
|
From: <de...@us...> - 2004-01-07 01:48:22
|
Update of /cvsroot/pymerase/smw/smw/profiles/UML14/plugins
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/profiles/UML14/plugins
Added Files:
__init__.py mmgenPlugin.py vUML.py
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: __init__.py ---
--- NEW FILE: mmgenPlugin.py ---
import qt
from smw.modeler import iconcache
class MMGenPlugin:
def __init__(self,modelerApp):
self.modelerApp=modelerApp
def doIt(self):
from smw.mmgen import mmgen
if self.modelerApp.project.profile.name!="UML14":
qt.QMessageBox.critical(self.modelerApp,"Invalid Profile",
"This plugin only works with the standard UML 1.4 profile.")
return
dlg=mmgen.GeneratorGUI()
dlg.SourceFile.setText("Current model in editor")
dlg.SelectSource_3.setEnabled(0)
dlg.SourceFile.setEnabled(0)
dlg.UMLFormat.setChecked(1)
dlg.FileFormat_3.setEnabled(0)
dlg.UMLVersion.setCurrentText(self.modelerApp.project.profile.name)
dlg.model=self.modelerApp.project.getRoot()
dlg.exec_loop()
def register(modelerApp):
mmgen=MMGenPlugin(modelerApp)
modelerApp.actions.registerAction(
"mmgenTool","Metamodel Generation Tool...",
qt.QIconSet(iconcache.getIcon("pluginManager")),
0,mmgen,mmgen.doIt,"project")
# Tell the application to place the icon and menu option just after the
# openProject action. (The editor will try to do its best, but maybe the
# place is already taken by another plugin)
modelerApp.actions["mmgenTool"].pleaseShowAfter(
modelerApp.actions["pluginManager"])
return mmgen
--- NEW FILE: vUML.py ---
import qt
from smw.modeler import iconcache
class vUMLPlugin:
def __init__(self,modelerApp):
self.modelerApp=modelerApp
def doIt(self):
if self.modelerApp.project.profile.name!="UML14":
qt.QMessageBox.critical(self.modelerApp,"Invalid Profile",
"This plugin only works with the standard UML 1.4 profile.")
return
def register(modelerApp):
mmgen=vUMLPlugin(modelerApp)
modelerApp.actions.registerAction(
"vUMLTool","vUML Tool...",
qt.QIconSet(iconcache.getIcon("pluginManager")),
0,mmgen,mmgen.doIt,"project")
# Tell the application to place the icon and menu option just after the
# openProject action. (The editor will try to do its best, but maybe the
# place is already taken by another plugin)
modelerApp.actions["vUMLTool"].pleaseShowAfter(
modelerApp.actions["pluginManager"])
return mmgen
|
|
From: <de...@us...> - 2004-01-07 01:48:22
|
Update of /cvsroot/pymerase/smw/smw/profiles/UML14 In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/profiles/UML14 Added Files: __init__.py Log Message: Imported version of SMW downloaded on 2003 Apr 14 --- NEW FILE: __init__.py --- |
|
From: <de...@us...> - 2004-01-07 01:48:22
|
Update of /cvsroot/pymerase/smw/smw/modeler/unittest
In directory sc8-pr-cvs1:/tmp/cvs-serv32238/smw/modeler/unittest
Added Files:
Cap.smt __init__.py model.smw test.iml testCap.py
testLoadModelWithPresentations.py testTrans.py testaUMLApp.py
transformation.smt
Log Message:
Imported version of SMW downloaded on 2003 Apr 14
--- NEW FILE: Cap.smt ---
(ismw.modeler.TransEditor
Transformation
p1
(dp2
S'edited'
p3
I0
sS'log'
p4
(ismw.log
LogAdapter
(dp5
S'logger'
p6
(ismw.log
Logger
(dp7
S'observers'
p8
(lsS'channels'
p9
(dsS'lastTime'
p10
S'Thu, 19 Dec 2002 13:31'
sbsS'channel'
p11
S'Transformation'
p12
sbsS'parameters'
p13
(dsS'execRes'
p14
(lp15
I0
asS'doc'
p16
S''
sS'counter'
p17
I0
sS'namespace'
p18
(dp19
S'self'
p20
g1
sS'name'
p21
S'unnamed'
p22
ssg21
S'Cap'
sS'newE'
p23
I0
sS'guard'
p24
S'1'
sS'stick'
p25
I1
sS'ruleSet'
p26
(lp27
(ismw.modeler.TransEditor
Rule
p28
(dp29
S'body'
p30
S'e.name=string.capitalize(e.name)'
sg3
I0
sg24
S'e.name[0] not in string.ascii_uppercase'
sS'parent'
p31
g1
sg21
S'New Rule'
sS'para'
p32
S'e:Classifier'
sg16
S'This is the documentation of a Rule'
sS'__name__'
p33
S'rule'
p34
sbasS'metamodel'
p35
Nsg33
S'transformation'
p36
sS'model'
p37
NsS'once'
p38
I1
sS'consumer'
p39
NsS'common'
p40
S''
sb.
--- NEW FILE: __init__.py ---
--- NEW FILE: model.smw ---
SMW_MODEL
METAMODEL smw.metamodel.UML14
PROFILE UML14
(ismw.metamodel.UML14
Model
p1
(dp2
S'isAbstract'
p3
I0
sS'isSpecification'
p4
I0
sS'__uniqueID__'
p5
S'DCE:3D725E52-0A9E-11D7-8A7C-0004761E9A69'
p6
sS'modulestring'
p7
[...3447 lines suppressed...]
(ismw.metamodel.MetaMM
MMAssociationEnd
p650
(dp651
g11
(I3
g50
I0
g51
I0
I0
tp652
sg15
g47
sg16
g1
sg17
(lp653
g164
asbsb.
--- NEW FILE: test.iml ---
SMW_MODEL
METAMODEL x
PROFILE None
(ismw.metamodel.UML14
Model
p1
(dp2
S'isAbstract'
p3
I0
sS'isSpecification'
p4
I0
sS'__uniqueID__'
p5
S'viyaoijdwtsscobh'
p6
sS'isRoot'
p7
[...1518 lines suppressed...]
asbsg28
(ismw.metamodel.MetaMM
MMAssociationEnd
p329
(dp330
g16
(I3
g31
I0
g32
I0
tp331
sg20
g28
sg21
g1
sg22
(lp332
g38
asbsb.
--- NEW FILE: testCap.py ---
import time
import unittest
import sys
import string
from smw.modeler import modelerApp
from smw.modeler.TransEditor import *
smw=modelerApp.modelerApp()
smw.main(loop=0,args=["--profile","UML14"])
smw.openProject('model.smw')
smw.processEvents()
tdlg=TransformationDlg(smw)
tdlg.show()
##Tests that the transformation is changed and the different fields
##are uppdated
smw.processEvents()
p = tdlg.TEL.editor.subEditors[0].currentTrans
counter = tdlg.TEL.editor.subEditors[0].runTrans()
assert(str(tdlg.TEL.editor.subEditors[1].NameLineEdit.text())==p.name)
assert(str(tdlg.TEL.editor.subEditors[1].GuardLineEdit.text())==p.guard)
assert(str(tdlg.TEL.editor.subEditors[1].ComTextEdit.text())==p.common)
assert(str(tdlg.TEL.editor.subEditors[3].editor.subEditors[0].\
NLineEdit.text())==p.ruleSet[0].name)
assert(str(tdlg.TEL.editor.subEditors[3].editor.subEditors[0].\
PLineEdit.text())==p.ruleSet[0].para)
assert(str(tdlg.TEL.editor.subEditors[3].editor.subEditors[0].\
GLineEdit.text())==p.ruleSet[0].guard)
assert(str(tdlg.TEL.editor.subEditors[3].editor.subEditors[0].\
BTextEdit.text())==p.ruleSet[0].body)
smw.processEvents()
tdlg.TEL.itable.setCurrentCell(1,0)
c = tdlg.TEL.editor.subEditors[0].currentTrans
assert(c==tdlg.TEL.list[1])
assert(c!=p)
assert(str(tdlg.TEL.editor.subEditors[1].NameLineEdit.text())!=p.name)
##Can't be tested since they both have the same values
##assert(str(tdlg.TEL.editor.subEditors[1].GuardLineEdit.text())!=p.guard)
##assert(str(tdlg.TEL.editor.subEditors[1].ComTextEdit.text())!=p.common)
##assert(str(tdlg.TEL.editor.subEditors[3].editor.subEditors[0].\
## NLineEdit.text())!=p.ruleSet[0].name)
assert(str(tdlg.TEL.editor.subEditors[3].editor.subEditors[0].\
PLineEdit.text())!=p.ruleSet[0].para)
assert(str(tdlg.TEL.editor.subEditors[3].editor.subEditors[0].\
GLineEdit.text())!=p.ruleSet[0].guard)
assert(str(tdlg.TEL.editor.subEditors[3].editor.subEditors[0].\
BTextEdit.text())!=p.ruleSet[0].body)
assert(str(tdlg.TEL.editor.subEditors[1].NameLineEdit.text())==c.name)
assert(str(tdlg.TEL.editor.subEditors[1].GuardLineEdit.text())==c.guard)
assert(str(tdlg.TEL.editor.subEditors[1].ComTextEdit.text())==c.common)
assert(str(tdlg.TEL.editor.subEditors[3].editor.subEditors[0].\
NLineEdit.text())==c.ruleSet[0].name)
assert(str(tdlg.TEL.editor.subEditors[3].editor.subEditors[0].\
PLineEdit.text())==c.ruleSet[0].para)
assert(str(tdlg.TEL.editor.subEditors[3].editor.subEditors[0].\
GLineEdit.text())==c.ruleSet[0].guard)
assert(str(tdlg.TEL.editor.subEditors[3].editor.subEditors[0].\
BTextEdit.text())==c.ruleSet[0].body)
smw.processEvents()
##
##Tests that Cap transformation transformed every Classifier name
for e in smw.project.getRoot().getAllParts():
if e.oclIsKindOf(Classifier):
assert(e.name[0] in string.ascii_uppercase)
smw.processEvents()
##
tdlg.close()
--- NEW FILE: testLoadModelWithPresentations.py ---
from smw import io
model=io.loadModel("test.iml")
assert(model)
io.saveModel("ModelWithPresentations2.iml",model)
--- NEW FILE: testTrans.py ---
import time
import unittest
import sys
from smw.modeler import modelerApp
from smw.modeler.TransEditor import *
smw=modelerApp.modelerApp()
smw.main(loop=0,args=["--profile","UML14"])
smw.openProject('model.smw')
smw.processEvents()
tdlg=TransformationDlg(smw)
tdlg.show()
##TEST COVERAGE AND REPETITION
smw.processEvents()
tdlg.TEL.itable.setCurrentCell(1,0)
counter = tdlg.TEL.editor.subEditors[0].runTrans()
c,a=0,0
for e in smw.project.getRoot().getAllParts():
if e.oclIsKindOf(Classifier):
c = c+1
if e.oclIsKindOf(Attribute):
a=a+1
val = (c*a)*2
assert(counter==val)
smw.processEvents()
counter = tdlg.TEL.editor.subEditors[0].runTrans()
c,a=0,0
for e in smw.project.getRoot().getAllParts():
if e.oclIsKindOf(Classifier):
c = c+1
if e.oclIsKindOf(Attribute):
a=a+1
val = (c*a)*2
assert(counter==val)
smw.processEvents()
counter = tdlg.TEL.editor.subEditors[0].runTrans()
c,a=0,0
for e in smw.project.getRoot().getAllParts():
if e.oclIsKindOf(Classifier):
c = c+1
if e.oclIsKindOf(Attribute):
a=a+1
val = (c*a)*2
assert(counter==val)
smw.processEvents()
##
tdlg.close()
--- NEW FILE: testaUMLApp.py ---
import unittest
import sys
from smw.modeler import modelerApp
smw=modelerApp.modelerApp()
smw.main(loop=0,args=["--profile","UML14"])
# test About dialog
ad=smw.about()
ad.close()
smw.closeProject()
ad=smw.about()
ad.close()
assert(smw.project==None)
smw.processEvents()
smw.newProject(useDefaultProfile=1)
ad=smw.about()
ad.close()
assert(not smw.project.history.canUndo())
assert(not smw.project.history.canRedo())
smw.processEvents()
smw.closeProject()
smw.processEvents()
smw.newProject(useDefaultProfile=1)
smw.processEvents()
smw.saveProjectAs('empty.smw')
smw.processEvents()
smw.saveProject()
smw.processEvents()
smw.closeProject()
smw.processEvents()
smw.openProject('empty.smw')
smw.processEvents()
assert(not smw.project.history.canUndo())
assert(not smw.project.history.canRedo())
smw.openProject('empty.smw')
smw.processEvents()
# test undo and redo (with empty history)
for i in range(3):
smw.undo()
for i in range(3):
smw.redo()
smw.quit()
--- NEW FILE: transformation.smt ---
(ismw.modeler.TransEditor
Transformation
p1
(dp2
S'log'
p3
(ismw.log
LogAdapter
(dp4
S'logger'
p5
(ismw.log
Logger
p6
(dp7
S'observers'
p8
(lsS'channels'
p9
(dsS'lastTime'
p10
S'Thu, 19 Dec 2002 16:54'
sbsS'channel'
p11
S'Transformation'
p12
sbsS'edited'
p13
I0
sS'name'
p14
S'transformation'
sS'parameters'
p15
(dsS'once'
p16
I1
sS'execRes'
p17
(lp18
I0
asS'doc'
p19
S''
sS'counter'
p20
I0
sS'namespace'
p21
(dp22
S'self'
p23
g1
sg14
S'unnamed'
p24
ssS'newE'
p25
I0
sS'guard'
p26
S'1'
sS'common'
p27
S''
sS'metamodel'
p28
NsS'__name__'
p29
S'transformation'
p30
sS'model'
p31
NsS'stick'
p32
I1
sS'consumer'
p33
NsS'ruleSet'
p34
(lp35
(ismw.modeler.TransEditor
Rule
p36
(dp37
S'body'
p38
S'print e,c'
sg13
I0
sg26
S'1'
sS'parent'
p39
g1
sg14
S'New Rule'
sS'para'
p40
S'e:Attribute,c:Classifier'
sg19
S'This is the documentation of a Rule'
sg29
S'rule'
p41
sbasb.
|