def setUp(self):
        if self.sandbox is None:
            super(ProxyTestCase, self).setUp()
            type(self).sandbox = Item("sandbox", self.view, None)
            del self.view
        view = self.sandbox.itsView

        self.event = pim.calendar.Calendar.CalendarEvent(
            itsParent=self.sandbox,
            displayName=u"An event",
            startTime=datetime.datetime(
                2007,
                3,
                16,
                11,
                30,
                tzinfo=view.tzinfo.getInstance("America/New_York")),
            duration=datetime.timedelta(minutes=15),
            anyTime=False,
            read=False,
        )
        self.rruleset = self.makeRuleset('daily')
        self.one = pim.SmartCollection(itsParent=self.sandbox,
                                       displayName=u"One")
        self.two = pim.SmartCollection(itsParent=self.sandbox,
                                       displayName=u"Two")
        return view
    def setUp(self):

        if not hasattr(RecurrenceConflictTestCase, 'view'):
            super(RecurrenceConflictTestCase, self).setUp()
            RecurrenceConflictTestCase.view = self.view
            del self.view

        view = RecurrenceConflictTestCase.view
        self.sandbox = Item("sandbox", view, None)

        self.pacific = self.view.tzinfo.getInstance("America/Los_Angeles")
        self.floating = self.view.tzinfo.floating
        self.utc = self.view.tzinfo.UTC

        self.start = datetime.datetime(2007, 4, 10, 9, tzinfo=self.floating)

        self.master = Calendar.CalendarEvent(None, itsParent=self.sandbox)
        self.uuid = self.master.itsItem.itsUUID.str16()
        self.master.startTime = self.start
        self.master.anyTime = self.master.allDay = False

        # create a baseline dictionary with keywords for creating an EventRecord
        names = (i.name for i in EventRecord.__fields__ if i.name != 'uuid')
        # default values to NoChange
        self.kwds = dict.fromkeys(names, sharing.NoChange)
Example #3
0
    def packStart(self, attrs):

        if attrs.has_key('cwd'):
            cwd = attrs['cwd']
            if isinstance(cwd, unicode):
                cwd = cwd.encode(self.fsenc)

            self.cwd[-1] = os.path.join(self.cwd[-1], cwd)

        if attrs.has_key('file'):
            if not self.view.find(Path('//', 'Packs', attrs['name'])):
                try:
                    file = attrs['file']
                    if isinstance(file, unicode):
                        file = file.encode(self.fsenc)

                    self.view.loadPack(os.path.join(self.cwd[-1], file),
                                       self.parent[-1], self.package)
                except:
                    self.saveException()
                    return

        else:
            self.name = attrs['name']
            self.pack = Item(self.name, self.packs, None)
            self.hooks.append([])
    def setUp(self):
        if SharedSandboxTestCase.view is None:
            super(SharedSandboxTestCase, self).setUp()
            SharedSandboxTestCase.view = self.view
            del self.view

        self.sandbox = Item("sandbox", SharedSandboxTestCase.view, None)
Example #5
0
    def testSubAttributes(self):
        """Test attributes which have sub attributes (subAttributes and superAttribute attributes)"""
        view = self.view
        itemKind = view.findPath('//Schema/Core/Item')
        attrKind = view.findPath('//Schema/Core/Attribute')
        self.assert_(itemKind is not None)

        attr = Attribute('references', view.findPath('//Schema/Core'), attrKind,
                         cardinality='list', otherName='item')
        itemKind.attributes.append(attr, alias='references')
        
        attr_name = 'references'
        
        item = Item('item1', view, itemKind)
        attrKind = itemKind.itsParent['Attribute']

        # subattributes are created by assigning the "parent" attribute
        # to the superAttribute attribute of the "child" attribute
        testAttr = itemKind.getAttribute(attr_name)
        criticalSubAttr = Attribute('critical', testAttr, attrKind)
        criticalSubAttr.superAttribute = testAttr
        self.assert_(criticalSubAttr.superAttribute is testAttr)
        self.assert_(criticalSubAttr in testAttr.subAttributes)

        # now do it by assigning to the subAttributes list to ensure that
        # the bidirectional ref is getting updated.
        normalSubAttr = Attribute('normal', testAttr, attrKind)
        testAttr.subAttributes.append(normalSubAttr)
        self.assert_(normalSubAttr.superAttribute is testAttr)
        self.assert_(normalSubAttr in testAttr.subAttributes)
        
        # now do it by callin addValue on the Attribute item
        minorSubAttr = Attribute('minor', testAttr, attrKind)
        testAttr.addValue('subAttributes', minorSubAttr)
        self.assert_(minorSubAttr.superAttribute is testAttr)
        self.assert_(minorSubAttr in testAttr.subAttributes)

        # now write what we've done and read it back
        self._reopenRepository()
        view = self.view
        item = view.findPath('//item1')
        itemKind = item.itsKind
        testAttr = itemKind.getAttribute(attr_name)

        attMap = {}
        for i in testAttr.subAttributes:
            attMap[i.itsName] = i 
            
        criticalSubAttr = attMap['critical']
        normalSubAttr = attMap['normal']
        minorSubAttr = attMap['minor']
        self.assert_(criticalSubAttr.superAttribute is testAttr)
        self.assert_(criticalSubAttr in testAttr.subAttributes)
        self.assert_(normalSubAttr.superAttribute is testAttr)
        self.assert_(normalSubAttr in testAttr.subAttributes)
        self.assert_(minorSubAttr.superAttribute is testAttr)
        self.assert_(minorSubAttr in testAttr.subAttributes)
Example #6
0
    def prepareTestData(self):

        # Make sure these are initialized, otherwise they won't be tracking
        # icalUIDs
        schema.ns('osaf.sharing', self.views[0]).uid_map
        schema.ns('osaf.sharing', self.views[1]).uid_map

        view = self.views[0]
        # create a sandbox root
        Item("sandbox", view, None)

        sandbox = view.findPath("//sandbox")
        coll = pim.ListCollection("testCollection",
                                  sandbox,
                                  displayName="Test Collection")

        names = [
            (u"Morgen", u"Sagen", u"*****@*****.**"),
            (u"Ted", u"Leung", u"*****@*****.**"),
            (u"Andi", u"Vajda", u"*****@*****.**"),
        ]

        contacts = []

        for name in names:
            c = pim.Contact(None, sandbox)
            c.contactName = pim.ContactName(None, sandbox)
            c.contactName.firstName = name[0]
            c.contactName.lastName = name[1]
            c.emailAddress = name[2]
            c.displayName = u"%s %s" % (name[0], name[1])
            contacts.append(c)

        events = [
            u"breakfast",
            u"lunch",
            u"dinner",
            u"meeting",
            u"movie",
            u'\u8fd1\u85e4\u6df3\u4e5f\u306e\u65b0\u30cd\u30c3\u30c8\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u8ad6',
        ]

        self.uuids = {}

        tzinfo = sandbox.itsView.tzinfo.default
        for i in xrange(6):
            c = pim.CalendarEvent(None, sandbox)
            c.summary = events[i % 6]
            c.organizer = contacts[0]
            c.participants = [contacts[1], contacts[2]]
            c.startTime = datetime.datetime(2005, 10, 31, 12, 0, 0, 0, tzinfo)
            c.duration = datetime.timedelta(minutes=60)
            c.anyTime = False
            self.uuids[c.itsItem.itsUUID] = c.summary
            coll.add(c.itsItem)
    def testLiteralAttributes(self):
        view = self.view
        """Test basic features of literal attributes"""
        kind = view.findPath('//Schema/Core/Kind')
        itemKind = view.findPath('//Schema/Core/Item')
        self.assert_(itemKind is not None)
        attrKind = view.findPath('//Schema/Core/Attribute')
        self.assert_(attrKind is not None)
        stringType = view.findPath('//Schema/Core/String')
        self.assert_(stringType is not None)

        attr = attrKind.newItem('testAttr', itemKind, type=stringType)
        itemKind.attributes.add(attr, 'testAttr')
        self.assert_(itemKind.getAttribute('testAttr', True) is not None)

        kind1 = Kind('kind1', view, kind)
        self.assert_(kind1 is not None)

        item1 = Item('item1', view, itemKind)
        self.assert_(item1 is not None)

        #Test hasAttributeAspect and getAttributeAspect
        self.assert_(
            kind1.hasAttributeAspect('attributes', 'cardinality') and
            kind1.getAttributeAspect('attributes', 'cardinality') == 'list')

        self.assert_(
            kind1.hasAttributeAspect('superKinds', 'cardinality') and
            kind1.getAttributeAspect('superKinds', 'cardinality') == 'list')

        self.assert_(
            kind1.hasAttributeAspect('classes', 'cardinality')
            and kind1.getAttributeAspect('classes', 'cardinality') == 'dict')

        # up to here testAttr is an unset Chandler attribute
        self.failUnlessRaises(AttributeError, lambda: item1.testAttr)
        # now set the attribute
        item1.setAttributeValue('testAttr', u'myName')
        self.assertEquals(item1.testAttr, u'myName')
        #test __getattr__ and getAttributeValue() access
        self.assertEquals(item1.testAttr, item1.getAttributeValue('testAttr'))
        # now remove attribute value
        item1.removeAttributeValue('testAttr')
        self.failUnlessRaises(AttributeError, lambda: item1.testAttr)
        #TODO need a test for list valued literal attribute

        # test dict valued literal attribute
        self.assert_(kind.classes['python'] is not None)
Example #8
0
    def __init__(self, path, parent, package, view):

        ContentHandler.__init__(self)

        self.path = path
        self.package = package
        self.cwd = [os.path.dirname(path)]
        self.parent = [parent]
        self.view = view
        self.hooks = []

        # the xml parser may return unicode for non-ascii paths or names
        # which need to be encoded to utf8
        self.fsenc = 'utf8'

        packs = view.getRoot('Packs')
        if packs is None:
            packs = Item('Packs', view, None)
        self.packs = packs
Example #9
0
    def testItemParentChild(self):
        """Test basic attribute functionality, focusing on parent-child relationships"""
        view = self.view
        # Test find()
        kind = view.findPath('//Schema/Core/Item')
        self.assert_(kind is not None)

        # Test itsName
        self.assertEquals(kind.itsName, 'Item')

        # Test itsPath
        self.assertEquals(str(kind.itsPath), '//Schema/Core/Item')

        # Test simple item construction
        item = Item('test', view, kind)
        self.assert_(item is not None)
        self.assert_(item.isItemOf(kind))
        self.failIf(item.isRemote())
        self.failIf(item.hasChildren())
        self.assertEquals(item.itsName, 'test')
        self.assertItemPathEqual(item, '//test')
        self.assertEquals(item.refCount(), 0)
        self.assert_(item.isNew())
        self.assert_(item.isDirty())
        self.failIf(item.isDeleted())
        self.failIf(item.isStale())
        self.assertEquals(view, item.itsView)

        #TODO test toXML
        out = StringIO()
        generator = XMLPrettyGenerator(XMLGenerator(out))
        itemWriter = XMLItemWriter(generator)
        generator.startDocument()
        itemWriter.writeItem(item, item.getVersion())
        generator.endDocument()
        xml = out.getvalue()
        out.close()

        self.failIf(xml is None)

        # Test to see that item became a respository root
        view.commit()
        roots = list(view.iterRoots())
        self.assert_(item in roots)
        self.failIf(item.isDirty())

        # Test placing children
        child1 = Item('child1', item, kind)
        self.assertEquals(child1.itsName, 'child1')
        self.assertItemPathEqual(child1, '//test/child1')
        self.assert_(item.hasChildren())
        self.assert_(item.hasChild('child1'))
        item.placeChild(child1, None)
        self.assert_(item.hasChild('child1'))
        self.failIf(item.isNew())
        self.assert_(item.isDirty())

        child2 = Item('child2', item, kind)
        self.assertEquals(child2.itsName, 'child2')
        self.assertItemPathEqual(child2, '//test/child2')
        self.assert_(item.hasChildren())
        self.assert_(item.hasChild('child1'))
        self.assert_(item.hasChild('child2'))

        item.placeChild(child2, child1)
        self.assert_(item.hasChild('child2'))
        self.failIf(item.isNew())
        self.assert_(item.isDirty())

        self.assertEqual(item.getItemChild('child1'), child1)
        self.assertEqual(item.getItemChild('child2'), child2)
        self.assertEqual(child1.itsParent, item)
        self.assertEqual(child2.itsParent, item)

        # Test iterating over child items
        iter = item.iterChildren()
        self.assertEqual(item.getItemChild('child1'), iter.next())
        self.assertEqual(item.getItemChild('child2'), iter.next())

        #        self.failUnlessRaises(StopIteration, lambda: iter.next())

        # now write what we've done and read it back
        self._reopenRepository()
        view = self.view
        item = view.findPath('//test')
        child1 = item['child1']
        child2 = item['child2']
        self.assertIsRoot(item)
        self.assert_(item.hasChildren())
        self.assert_(item.hasChild('child1'))
        self.assert_(item.hasChild('child2'))

        # Test item renaming, itsName
        kind = view.findPath('//Schema/Core/Item')
        child3 = Item('busted', item, kind)
        self.assertEqual(child3.itsName, 'busted')
        child3.itsName = 'busted'
        self.assertEqual(child3.itsName, 'busted')
        child3.itsName = 'child3'
        self.assertEqual(child3.itsName, 'child3')

        # Test that placing affects iteration order
        item.placeChild(child3, child1)
        iter = item.iterChildren()
        iter.next()
        self.assertEqual(child3, iter.next())
        self.assertItemPathEqual(child3, '//test/child3')
        self.assertIsRoot(child3.itsRoot)

        # Test item movement to same parent
        oldParent = child3.itsParent
        child3.itsParent = child3.itsParent
        self.assertEqual(oldParent, child3.itsParent)
        self.assertItemPathEqual(child3, '//test/child3')
        self.assertIsRoot(child3.itsRoot)

        # Test item movement to leaf item
        child3.itsParent = child2
        self.assertEqual(child2, child3.itsParent)
        self.assertItemPathEqual(child3, '//test/child2/child3')
        self.assertIsRoot(child3.itsRoot)

        # now write what we've done and read it back
        self._reopenRepository()
        view = self.view
        item = view.findPath('//test')
        child1 = item['child1']
        child2 = item['child2']
        child3 = child2['child3']

        self.assertEqual(child2, child3.itsParent)
        self.assertItemPathEqual(child3, '//test/child2/child3')
        self.assertIsRoot(child3.itsRoot)

        # Test item movement to root
        child3.itsParent = view
        self.assertIsRoot(child3)
        self.assertItemPathEqual(child3, '//child3')
        self.assertIsRoot(child3.itsRoot)

        # now write what we've done and read it back
        self._reopenRepository()
        view = self.view
        item = view.findPath('//test')
        child1 = item['child1']
        child2 = item['child2']
        child3 = view['child3']

        self.assert_(child3 in list(view.iterRoots()))
        self.assertItemPathEqual(child3, '//child3')
        self.assertIsRoot(child3.itsRoot)