| 
									
										
										
										
											2013-07-13 02:34:43 -04:00
										 |  |  | '''Mock classes that imitate idlelib modules or classes.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Attributes and methods will be added as needed for tests. | 
					
						
							|  |  |  | '''
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from idlelib.idle_test.mock_tk import Text | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-03 20:54:21 -04:00
										 |  |  | class Func: | 
					
						
							| 
									
										
										
										
											2017-07-14 08:35:48 +08:00
										 |  |  |     '''Record call, capture args, return/raise result set by test.
 | 
					
						
							| 
									
										
										
										
											2014-06-03 20:54:21 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-14 08:35:48 +08:00
										 |  |  |     When mock function is called, set or use attributes: | 
					
						
							|  |  |  |     self.called - increment call number even if no args, kwds passed. | 
					
						
							|  |  |  |     self.args - capture positional arguments. | 
					
						
							|  |  |  |     self.kwds - capture keyword arguments. | 
					
						
							|  |  |  |     self.result - return or raise value set in __init__. | 
					
						
							| 
									
										
										
										
											2017-07-26 20:54:40 -04:00
										 |  |  |     self.return_self - return self instead, to mock query class return. | 
					
						
							| 
									
										
										
										
											2014-06-05 03:38:34 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-14 08:35:48 +08:00
										 |  |  |     Most common use will probably be to mock instance methods. | 
					
						
							|  |  |  |     Given class instance, can set and delete as instance attribute. | 
					
						
							| 
									
										
										
										
											2014-06-05 03:38:34 -04:00
										 |  |  |     Mock_tk.Var and Mbox_func are special variants of this. | 
					
						
							| 
									
										
										
										
											2014-06-03 20:54:21 -04:00
										 |  |  |     '''
 | 
					
						
							| 
									
										
										
										
											2017-07-26 20:54:40 -04:00
										 |  |  |     def __init__(self, result=None, return_self=False): | 
					
						
							| 
									
										
										
										
											2017-07-14 08:35:48 +08:00
										 |  |  |         self.called = 0 | 
					
						
							| 
									
										
										
										
											2014-06-03 20:54:21 -04:00
										 |  |  |         self.result = result | 
					
						
							| 
									
										
										
										
											2017-07-26 20:54:40 -04:00
										 |  |  |         self.return_self = return_self | 
					
						
							| 
									
										
										
										
											2014-06-03 20:54:21 -04:00
										 |  |  |         self.args = None | 
					
						
							|  |  |  |         self.kwds = None | 
					
						
							|  |  |  |     def __call__(self, *args, **kwds): | 
					
						
							| 
									
										
										
										
											2017-07-14 08:35:48 +08:00
										 |  |  |         self.called += 1 | 
					
						
							| 
									
										
										
										
											2014-06-03 20:54:21 -04:00
										 |  |  |         self.args = args | 
					
						
							|  |  |  |         self.kwds = kwds | 
					
						
							| 
									
										
										
										
											2014-07-11 00:16:00 -04:00
										 |  |  |         if isinstance(self.result, BaseException): | 
					
						
							|  |  |  |             raise self.result | 
					
						
							| 
									
										
										
										
											2017-07-26 20:54:40 -04:00
										 |  |  |         elif self.return_self: | 
					
						
							|  |  |  |             return self | 
					
						
							| 
									
										
										
										
											2014-07-11 00:16:00 -04:00
										 |  |  |         else: | 
					
						
							|  |  |  |             return self.result | 
					
						
							| 
									
										
										
										
											2014-06-03 20:54:21 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-13 02:34:43 -04:00
										 |  |  | class Editor: | 
					
						
							| 
									
										
										
										
											2016-05-28 13:22:31 -04:00
										 |  |  |     '''Minimally imitate editor.EditorWindow class.
 | 
					
						
							| 
									
										
										
										
											2013-07-13 02:34:43 -04:00
										 |  |  |     '''
 | 
					
						
							|  |  |  |     def __init__(self, flist=None, filename=None, key=None, root=None): | 
					
						
							|  |  |  |         self.text = Text() | 
					
						
							|  |  |  |         self.undo = UndoDelegator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def get_selection_indices(self): | 
					
						
							|  |  |  |         first = self.text.index('1.0') | 
					
						
							|  |  |  |         last = self.text.index('end') | 
					
						
							|  |  |  |         return first, last | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-03 20:54:21 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-13 02:34:43 -04:00
										 |  |  | class UndoDelegator: | 
					
						
							| 
									
										
										
										
											2016-05-28 13:22:31 -04:00
										 |  |  |     '''Minimally imitate undo.UndoDelegator class.
 | 
					
						
							| 
									
										
										
										
											2013-07-13 02:34:43 -04:00
										 |  |  |     '''
 | 
					
						
							|  |  |  |     # A real undo block is only needed for user interaction. | 
					
						
							|  |  |  |     def undo_block_start(*args): | 
					
						
							|  |  |  |         pass | 
					
						
							|  |  |  |     def undo_block_stop(*args): | 
					
						
							|  |  |  |         pass |