def test__next_rId_fills_gap(self):
     """_RelationshipCollection._next_rId fills gap in rId sequence"""
     # setup ------------------------
     part1 = _BasePart()
     part2 = _BasePart()
     part3 = _BasePart()
     part4 = _BasePart()
     rel1 = _Relationship('rId1', None, part1)
     rel2 = _Relationship('rId2', None, part2)
     rel3 = _Relationship('rId3', None, part3)
     rel4 = _Relationship('rId4', None, part4)
     cases = (('rId1', (rel2, rel3, rel4)),
              ('rId2', (rel1, rel3, rel4)),
              ('rId3', (rel1, rel2, rel4)),
              ('rId4', (rel1, rel2, rel3)))
     # exercise ---------------------
     expected_rIds = []
     actual_rIds = []
     for expected_rId, rels in cases:
         expected_rIds.append(expected_rId)
         relationships = _RelationshipCollection()
         for rel in rels:
             relationships._additem(rel)
         actual_rIds.append(relationships._next_rId)
     # verify -----------------------
     expected = expected_rIds
     actual = actual_rIds
     msg = "expected rIds %s, got %s" % (expected, actual)
     self.assertEqual(expected, actual, msg)
 def test_it_raises_if_it_cant_find_a_related_part(self):
     """_RelationshipCollection raises if it can't find a related part"""
     # setup ------------------------
     relationships = _RelationshipCollection()
     # exercise ---------------------
     with self.assertRaises(KeyError):
         relationships.related_part('foobar')
 def __reltype_ordering_mock(self):
     """
     Return RelationshipCollection instance with mocked-up contents
     suitable for testing _reltype_ordering.
     """
     # setup ------------------------
     partnames = ['/ppt/slides/slide4.xml',
                  '/ppt/slideLayouts/slideLayout1.xml',
                  '/ppt/slideMasters/slideMaster1.xml',
                  '/ppt/slides/slide1.xml',
                  '/ppt/presProps.xml']
     part1 = Mock(name='part1')
     part1.partname = partnames[0]
     part2 = Mock(name='part2')
     part2.partname = partnames[1]
     part3 = Mock(name='part3')
     part3.partname = partnames[2]
     part4 = Mock(name='part4')
     part4.partname = partnames[3]
     part5 = Mock(name='part5')
     part5.partname = partnames[4]
     rel1 = _Relationship('rId1', RT_SLIDE,        part1)
     rel2 = _Relationship('rId2', RT_SLIDE_LAYOUT, part2)
     rel3 = _Relationship('rId3', RT_SLIDE_MASTER, part3)
     rel4 = _Relationship('rId4', RT_SLIDE,        part4)
     rel5 = _Relationship('rId5', RT_PRES_PROPS,   part5)
     relationships = _RelationshipCollection()
     relationships._additem(rel1)
     relationships._additem(rel2)
     relationships._additem(rel3)
     relationships._additem(rel4)
     relationships._additem(rel5)
     return (relationships, partnames)
 def build(self):
     rels = _RelationshipCollection()
     for rel in self.relationships:
         rels._additem(rel)
     if self.reltype_ordering:
         rels._reltype_ordering = self.reltype_ordering
     return rels
 def test_it_can_find_related_part(self):
     """_RelationshipCollection can find related part"""
     # setup ------------------------
     reltype = RT_CORE_PROPS
     part = Mock(name='part')
     relationship = _Relationship('rId1', reltype, part)
     relationships = _RelationshipCollection()
     relationships._additem(relationship)
     # exercise ---------------------
     retval = relationships.related_part(reltype)
     # verify -----------------------
     assert_that(retval, same_instance(part))
 def test_reorders_on_partname_change(self):
     """RelationshipCollection reorders on partname change"""
     # setup ------------------------
     partname1 = '/ppt/slides/slide1.xml'
     partname2 = '/ppt/slides/slide2.xml'
     partname3 = '/ppt/slides/slide3.xml'
     part1 = PartBuilder().with_partname(partname1).build()
     part2 = PartBuilder().with_partname(partname2).build()
     rel1 = _Relationship('rId1', RT_SLIDE, part1)
     rel2 = _Relationship('rId2', RT_SLIDE, part2)
     relationships = _RelationshipCollection()
     relationships._reltype_ordering = (RT_SLIDE)
     relationships._additem(rel1)
     relationships._additem(rel2)
     # exercise ---------------------
     part1.partname = partname3
     # verify -----------------------
     expected = [partname2, partname3]
     actual = [rel._target.partname for rel in relationships]
     msg = "expected ordering %s, got %s" % (expected, actual)
     self.assertEqual(expected, actual, msg)
 def setUp(self):
     self.relationships = _RelationshipCollection()