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()