82 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			82 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | import unittest | ||
|  | import random | ||
|  | import time | ||
|  | 
 | ||
|  | from threading import Event | ||
|  | 
 | ||
|  | from pypot.creatures import PoppyErgoJr | ||
|  | from pypot.primitive import LoopPrimitive | ||
|  | 
 | ||
|  | 
 | ||
|  | class TestPrimLifeCycle(unittest.TestCase): | ||
|  |     def setUp(self): | ||
|  |         self.jr = PoppyErgoJr(simulator='dummy') | ||
|  | 
 | ||
|  |     def tearDown(self): | ||
|  |         self.jr.close() | ||
|  | 
 | ||
|  |     def test_teardown(self): | ||
|  |         self.jr.dance.start() | ||
|  |         time.sleep(random.random() * 5) | ||
|  |         self.jr.dance.stop() | ||
|  | 
 | ||
|  |         self.assertEqual({m.led for m in self.jr.motors}, {'off'}) | ||
|  |         self.assertEqual({m.led for m in self.jr.dance.robot.motors}, {'off'}) | ||
|  | 
 | ||
|  |     def test_set_once(self): | ||
|  |         class Switcher(LoopPrimitive): | ||
|  |             def setup(self): | ||
|  |                 self.current_state = False | ||
|  |                 self.old_state = self.current_state | ||
|  | 
 | ||
|  |                 self.switched = Event() | ||
|  | 
 | ||
|  |             def update(self): | ||
|  |                 if self.current_state != self.old_state: | ||
|  |                     for m in self.robot.motors: | ||
|  |                         self.affect_once(m, 'led', | ||
|  |                                          'red' if self.current_state else 'off') | ||
|  | 
 | ||
|  |                     self.old_state = self.current_state | ||
|  | 
 | ||
|  |                     self.switched.set() | ||
|  | 
 | ||
|  |         p = Switcher(self.jr, 10) | ||
|  |         p.start() | ||
|  | 
 | ||
|  |         for m in self.jr.motors: | ||
|  |             m.led = 'off' | ||
|  | 
 | ||
|  |         self.jr.m3.led = 'pink' | ||
|  | 
 | ||
|  |         self.assertEqual([m.led for m in self.jr.motors], | ||
|  |                          ['off', 'off', 'pink', 'off', 'off', 'off']) | ||
|  | 
 | ||
|  |         p.switched.clear() | ||
|  |         p.current_state = not p.current_state | ||
|  |         p.switched.wait() | ||
|  | 
 | ||
|  |         self.assertEqual([m.led for m in self.jr.motors], | ||
|  |                          ['red', 'red', 'red', 'red', 'red', 'red']) | ||
|  | 
 | ||
|  |         self.jr.m3.led = 'blue' | ||
|  |         self.assertEqual([m.led for m in self.jr.motors], | ||
|  |                          ['red', 'red', 'blue', 'red', 'red', 'red']) | ||
|  | 
 | ||
|  |         p.stop() | ||
|  | 
 | ||
|  |     def test_start_pause_stop(self): | ||
|  |         self.jr.dance.start() | ||
|  |         self.jr.dance.pause() | ||
|  |         self.jr.dance.stop() | ||
|  | 
 | ||
|  |     def test_start_stop_pause_resume_random_order(self): | ||
|  |         cmd = ['start', 'stop', 'pause', 'resume'] | ||
|  | 
 | ||
|  |         for _ in range(10): | ||
|  |             getattr(self.jr.dance, random.choice(cmd))() | ||
|  | 
 | ||
|  | 
 | ||
|  | if __name__ == '__main__': | ||
|  |     unittest.main() |