[Subversion] / PEAK / src / peak / storage / tests / xmi.py  

View of /PEAK/src/peak/storage/tests/xmi.py

Parent Directory | Revision Log
Revision: 963 - (download) (as text)
Fri Apr 4 21:23:31 2003 UTC (21 years ago) by pje
File size: 3092 byte(s)
Got rid of deprecated 'peak.model' classes: Model, Package, Reference, etc.
from peak.api import *
from unittest import TestCase, makeSuite, TestSuite
from cStringIO import StringIO






































# Metamodel for our sample

class Letter(model.Element):

    class envelope(model.Attribute):
        referencedType = 'Envelope'
        referencedEnd  = 'letter'

class Envelope(model.Element):

    class toAddress(model.Attribute):   referencedType = 'Address'
    class fromAddress(model.Attribute): referencedType = 'Address'

    class letters(model.Collection):
        _XMINames = 'letter',
        referencedType = 'Letter'
        referencedEnd  = 'envelope'


class Address(model.Struct):

    class name(model.structField):
        referencedType = model.String

    class streetNumber(name):   pass
    class street(name):         pass
    class city(name):           pass
    class state(name):          pass
    class zip(name):            pass

    def __str__(self):
        return ", ".join(
            [self.name, '%s %s' % (self.streetNumber,self.street),
                self.city, '%s %s' % (self.state, self.zip) ]
        )






MailText="""<?xml version="1.0"?>

<!--
    Example from the XMI 1.1 specification appendix

    Strangely, this example doesn't use XML namespaces to specify the
    metamodel; if it followed every other example of XMI 1.1 style, it
    would have a "Mail:" prefix on every content tag.  Ah well, so much
    for standards.
-->

<XMI version="1.1">

    <XMI.header>
        <XMI.model xmi.name="myMail" href="myMail.xml"/>
        <XMI.metamodel xmi.name="peak.tests.MailModel" href="mail.xml"/>
    </XMI.header>

    <XMI.content>

        <Envelope xmi.id="myEnvelope" letter="myLetter">

            <Envelope.toAddress>
                <Address name="Sridhar" streetNumber="25725"
                    street="Jeronimo" city="Mission Viejo" state="CA" zip="92691"
                />
            </Envelope.toAddress>
            <Envelope.fromAddress>
                <Address name="Steve" streetNumber="555"
                    street="Bailey" city="San Jose" state="CA" zip="95141"
                />
            </Envelope.fromAddress>

        </Envelope>

        <Letter xmi.id="myLetter" envelope="myEnvelope"/>

    </XMI.content>

</XMI>"""

class XMIModelTests(TestCase):

    def setUp(self):
        self.envelope, self.letter = storage.xmi.fromFile(
            StringIO(MailText)
        )

    def checkTypes(self):
        assert isinstance(self.envelope,Envelope)
        assert isinstance(self.letter,Letter)

    def checkLinks(self):
        assert self.envelope.letters == [self.letter]
        assert self.letter.envelope is self.envelope


    def checkAddresses(self):

        e = self.envelope

        assert str(e.toAddress)== \
            "Sridhar, 25725 Jeronimo, Mission Viejo, CA 92691"

        assert str(e.fromAddress)== \
            "Steve, 555 Bailey, San Jose, CA 95141"

















TestClasses = (
    XMIModelTests,
)


def test_suite():
    s = []
    for t in TestClasses:
        s.append(makeSuite(t,'check'))
    return TestSuite(s)


cvs-admin@eby-sarna.com

Powered by ViewCVS 1.0-dev

ViewCVS and CVS Help