def testFractionalClearStrandCommand(self): """ The new API for clearStrand allows fractional values for base indices (see docs/virtualhelix.pdf). This tets them. """ vh = VirtualHelix(numBases=8, idnum=0) self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,_ _,_ _,_ _,_ _,_ _,_\n0 Staple: _,_ _,_ _,_ _,_ _,_ _,_ _,_ _,_') vh.connectStrand(StrandType.Scaffold, 2, 6) vh.connectStrand(StrandType.Staple, 0, 7) self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,> <,> <,> <,> <,_ _,_\n0 Staple: _,> <,> <,> <,> <,> <,> <,> <,_') vh.clearStrand(StrandType.Scaffold, 4, 4) vh.clearStrand(StrandType.Staple, 3, 5) self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,> <,> <,> <,> <,_ _,_\n0 Staple: _,> <,> <,_ _,_ _,_ _,> <,> <,_') vh.undoStack().undo() vh.undoStack().undo() self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,> <,> <,> <,> <,_ _,_\n0 Staple: _,> <,> <,> <,> <,> <,> <,> <,_') vh.undoStack().undo()
def testClearCrossovers(self): vh = VirtualHelix(numBases=8, idnum=0) vh.connectStrand(StrandType.Staple, 0, 7) vh1 = VirtualHelix(numBases=5, idnum=1) vh1.connectStrand(StrandType.Staple, 0, 5) vh1.installXoverFrom3To5(StrandType.Staple, 3, vh, 2) self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,_ _,_ _,_ _,_ _,_ _,_\n0 Staple: _,> <,> <,1:3 _,> <,> <,> <,> <,_') self.assertEqual(repr(vh1), '1 Scaffold: _,_ _,_ _,_ _,_ _,_\n1 Staple: _,> <,> <,> <,0:2 _,_') vh1.clearStrand(StrandType.Staple, 0, 5) self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,_ _,_ _,_ _,_ _,_ _,_\n0 Staple: _,> <,> <,_ _,> <,> <,> <,> <,_') self.assertEqual(repr(vh1), '1 Scaffold: _,_ _,_ _,_ _,_ _,_\n1 Staple: _,_ _,_ _,_ _,_ _,_') vh1.undoStack().undo() vh1.undoStack().undo() self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,_ _,_ _,_ _,_ _,_ _,_\n0 Staple: _,> <,> <,> <,> <,> <,> <,> <,_') self.assertEqual(repr(vh1), '1 Scaffold: _,_ _,_ _,_ _,_ _,_\n1 Staple: _,> <,> <,> <,> <,_') vh.installXoverFrom3To5(StrandType.Staple, 2, vh1, 3) self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,_ _,_ _,_ _,_ _,_ _,_\n0 Staple: _,> <,_ 1:3,> <,> <,> <,> <,> <,_') self.assertEqual(repr(vh1), '1 Scaffold: _,_ _,_ _,_ _,_ _,_\n1 Staple: _,> <,> <,_ 0:2,> <,_') vh1.clearStrand(StrandType.Staple, 0, 5) self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,_ _,_ _,_ _,_ _,_ _,_\n0 Staple: _,> <,_ _,> <,> <,> <,> <,> <,_') self.assertEqual(repr(vh1), '1 Scaffold: _,_ _,_ _,_ _,_ _,_\n1 Staple: _,_ _,_ _,_ _,_ _,_')
print "" print "" print "="*10 + 'Now It\'s Undo Time!' + "="*10 print "" print "" # Normally a VirtualHelix gets its undo stack from # its parent part, which gets it from the parent document. # However, vh and vh1 are orphaned VirtualHelices and so # they spawn their own separate undo stacks. We must therefore # be careful to invoke them in the opposite order to which they # had commands pushed, whereas normally we could just # document.undo() again and again. print "vh.undoStack().undo()" vh.undoStack().undo() print str(vh) print str(vh1) + "\n\n" print "vh1.undoStack().undo()" vh1.undoStack().undo() print str(vh) print str(vh1) + "\n\n" print "vh.undoStack().undo()" vh.undoStack().undo() print str(vh) + "\n\n" print "vh.undoStack().undo()" vh.undoStack().undo() print str(vh) + "\n\n"
def testVH(self): """ Perform the VirtualHelix tutorial and make sure that the expected changes occur to the sample VirtualHelix """ vh = VirtualHelix(numBases=8, idnum=0) self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,_ _,_ _,_ _,_ _,_ _,_\n0 Staple: _,_ _,_ _,_ _,_ _,_ _,_ _,_ _,_') vh.connectStrand(StrandType.Scaffold, 2, 6) vh.connectStrand(StrandType.Staple, 0, 7) self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,> <,> <,> <,> <,_ _,_\n0 Staple: _,> <,> <,> <,> <,> <,> <,> <,_') vh.clearStrand(StrandType.Scaffold, 3.5, 4.5) vh.clearStrand(StrandType.Staple, 2.5, 5.5) self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,> <,_ _,> <,> <,_ _,_\n0 Staple: _,> <,> <,_ _,_ _,_ _,> <,> <,_') vh1 = VirtualHelix(numBases=5, idnum=1) vh1.connectStrand(StrandType.Staple, 0, 4) self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,> <,_ _,> <,> <,_ _,_\n0 Staple: _,> <,> <,_ _,_ _,_ _,> <,> <,_') self.assertEqual(repr(vh1), '1 Scaffold: _,_ _,_ _,_ _,_ _,_\n1 Staple: _,> <,> <,> <,> <,_') vh.installXoverFrom3To5(StrandType.Staple, 2, vh1, 2) self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,> <,_ _,> <,> <,_ _,_\n0 Staple: _,> <,_ 1:2,> <,_ _,_ _,> <,> <,_') self.assertEqual(repr(vh1), '1 Scaffold: _,_ _,_ _,_ _,_ _,_\n1 Staple: _,> <,_ 0:2,> <,> <,_') vh.undoStack().undo() self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,> <,_ _,> <,> <,_ _,_\n0 Staple: _,> <,> <,_ _,_ _,_ _,> <,> <,_') self.assertEqual(repr(vh1), '1 Scaffold: _,_ _,_ _,_ _,_ _,_\n1 Staple: _,> <,> <,> <,> <,_') vh1.undoStack().undo() self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,> <,_ _,> <,> <,_ _,_\n0 Staple: _,> <,> <,_ _,_ _,_ _,> <,> <,_') self.assertEqual(repr(vh1), '1 Scaffold: _,_ _,_ _,_ _,_ _,_\n1 Staple: _,_ _,_ _,_ _,_ _,_') vh.undoStack().undo() self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,> <,_ _,> <,> <,_ _,_\n0 Staple: _,> <,> <,> <,> <,> <,> <,> <,_') vh.undoStack().undo() self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,> <,> <,> <,> <,_ _,_\n0 Staple: _,> <,> <,> <,> <,> <,> <,> <,_') vh.undoStack().undo() self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,> <,> <,> <,> <,_ _,_\n0 Staple: _,_ _,_ _,_ _,_ _,_ _,_ _,_ _,_') vh.undoStack().undo() self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,_ _,_ _,_ _,_ _,_ _,_\n0 Staple: _,_ _,_ _,_ _,_ _,_ _,_ _,_ _,_') vh.connectStrand(StrandType.Scaffold, 2, 4) vh.connectStrand(StrandType.Scaffold, 0, 7) vh.undoStack().undo() self.assertEqual(repr(vh), '0 Scaffold: _,_ _,_ _,> <,> <,_ _,_ _,_ _,_\n0 Staple: _,_ _,_ _,_ _,_ _,_ _,_ _,_ _,_')