class RobotControllerRecordingDelegate(Delegate):
    
    def __init__(self):
        Delegate.__init__(self)
        self.allowedEventTypes = ["NewPosition", "EndRecordSession", "NewRecordSession", "StartRecord", "StopRecord"]
        self.sequence = PositionSequence()
        self.manager = SequenceFileManager()
        self.recording = False
        
    def notify(self, event):
        if not self.doesHandleEvent(event):
            return
        
        if( event.type == "NewRecordSession" ):
            print "RobotControllerRecordingDelegate: new session named: " + event.data
            self.sessionName = event.data
        elif( event.type == "EndRecordSession" ):
            #saving data
            print "RobotControllerRecordingDelegate: saving file" + self.sessionName
            self.manager.save( self.sequence, self.sessionName )
            self.sessionName = 0 
        elif( event.type == "StartRecord"):
            print "RobotControllerRecordingDelegate: start recording"
            self.recording = True
        elif( event.type == "StopRecord" ):
            self.recording = False
        elif( event.type == "NewPosition" and self.recording ):
            print "RobotControllerRecordingDelegate: add position"
            self.sequence.appendPosition(event.data)
 def test_save_simpleJointFile_simple(self):
     preparedSequence = self.preparePositionSequence()
     targetFilepath = "data/temp.txt"
     self.manager.save(preparedSequence, targetFilepath)
     
     #load and test
     loadedSequence = PositionSequence([])
     self.manager.load(loadedSequence, targetFilepath)
     
     assert loadedSequence.amount() == 100, "Sequence should consist of 100 positions"
     
     os.remove(targetFilepath)
class TestPositionLineIntepreter:
	
	def setup_method(self, method):
		self.interpreter = PositionLineInterpreter()
		self.sequence = PositionSequence([])
		
	def test_simpleJoint(self):
		self.interpreter.interpret(self.sequence, "move(60.0,-30.0,30.0,-20.0,10.0,-40.0)")
		
		assert self.sequence.amount() == 1
		assert self.sequence.getCurrentPosition().getValue()[1] == -30
	
	def test_comments(self):
		self.interpreter.interpret(self.sequence, "#testing line")
		
		assert self.sequence.amount() == 0
		
	def test_newline(self):
		self.interpreter.interpret(self.sequence, " \n")
		
		assert self.sequence.amount() == 0
	
	def test_cartesianLine(self):
		self.interpreter.interpret(self.sequence, "moveCartesian(60.0,-30.0,30.0)")
		
		assert self.sequence.amount() == 1
		assert self.sequence.getCurrentPosition().type == "Cartesian"
		
	def test_deltaJointLine(self):
		self.interpreter.interpret(self.sequence, "moveBy(60.0,-30.0,30.0,3,3,3)")
		
		assert self.sequence.amount() == 1
		assert self.sequence.getCurrentPosition().type == "DeltaJoint"
	
	def test_deltaCartesianLine(self):
		self.interpreter.interpret(self.sequence, "moveCartesianBy(60.0,-30.0,30.0)")
		
		assert self.sequence.amount() == 1
		assert self.sequence.getCurrentPosition().type == "DeltaCartesian"
	
	def teardown_method(self, method):
		self.interpreter = 0
		self.sequence = 0
		
class TestSequenceFileManager:
    
    def setup_method(self, method):
        self.manager = SequenceFileManager()
        self.sequence = PositionSequence([])
        
    def test_load_simpleJointFile(self):
        self.manager.load(self.sequence, "data/simple.txt")
        
        assert self.sequence.amount() == 3
    
    def test_save_simpleJointFile_fileCreation(self):
        preparedSequence = self.preparePositionSequence()
        targetFilepath = "data/temp.txt"
        self.manager.save(preparedSequence, targetFilepath)
        
        assert os.path.exists(targetFilepath) 
        os.remove(targetFilepath)
        
    def test_save_simpleJointFile_simple(self):
        preparedSequence = self.preparePositionSequence()
        targetFilepath = "data/temp.txt"
        self.manager.save(preparedSequence, targetFilepath)
        
        #load and test
        loadedSequence = PositionSequence([])
        self.manager.load(loadedSequence, targetFilepath)
        
        assert loadedSequence.amount() == 100, "Sequence should consist of 100 positions"
        
        os.remove(targetFilepath)
        
    
    def test_load_fileNotFound(self):
        try:
            self.manager.load(self.sequence, "dummyFileDoesnExists.txt")
        except:
            assert py.test.raises(Exception, "Filename not found")
            return
        
        assert False, "Exception not thrown"
    
    #helpers
    def preparePositionSequence(self):
        sequence = PositionSequence([])
        for i in range(0,100):
            sequence.appendPosition(JointPosition([0*i,1*i,2*i,3*i,4*i,5*i]))
        
        return sequence
    
    def teardown_method(self, method):
        self.manager = 0
        self.sequence = 0
 def preparePositionSequence(self):
     sequence = PositionSequence([])
     for i in range(0,100):
         sequence.appendPosition(JointPosition([0*i,1*i,2*i,3*i,4*i,5*i]))
     
     return sequence
 def setup_method(self, method):
     self.manager = SequenceFileManager()
     self.sequence = PositionSequence([])
	def setup_method(self, method):
		self.interpreter = PositionLineInterpreter()
		self.sequence = PositionSequence([])
 def __init__(self):
     Delegate.__init__(self)
     self.allowedEventTypes = ["NewPosition", "EndRecordSession", "NewRecordSession", "StartRecord", "StopRecord"]
     self.sequence = PositionSequence()
     self.manager = SequenceFileManager()
     self.recording = False