/scripts/SANS/sans/test_helper/mock_objects.py

https://github.com/wdzhou/mantid
Python | 215 lines | 142 code | 64 blank | 9 comment | 18 complexity | eb70e1c7b8ab76031b0d9346cb2136c6 MD5 | raw file
  1. from __future__ import (absolute_import)
  2. from ui.sans_isis.sans_data_processor_gui import SANSDataProcessorGui
  3. from ui.sans_isis.settings_diagnostic_tab import SettingsDiagnosticTab
  4. from ui.sans_isis.masking_table import MaskingTable
  5. from sans.gui_logic.presenter.run_tab_presenter import RunTabPresenter
  6. from sans.common.enums import (RangeStepType, OutputMode)
  7. from sans.test_helper.test_director import TestDirector
  8. import sys
  9. if sys.version_info.major == 3:
  10. from unittest import mock
  11. else:
  12. import mock
  13. def create_mock_settings_diagnostic_tab():
  14. view = mock.create_autospec(SettingsDiagnosticTab, spec_set=False)
  15. view.get_current_row = mock.MagicMock(return_value=3)
  16. return view
  17. def create_mock_masking_table():
  18. view = mock.create_autospec(MaskingTable, spec_set=False)
  19. view.get_current_row = mock.MagicMock(return_value=3)
  20. return view
  21. def get_cell_mock(row, column, convert_to=None):
  22. _ = convert_to # noqa
  23. if row == 0:
  24. # For the first row we return the
  25. # all of hte sample data
  26. if column == 0:
  27. return "SANS2D00022024"
  28. elif column == 1:
  29. return "SANS2D00022048"
  30. elif column == 2:
  31. return "SANS2D00022048"
  32. else:
  33. return ""
  34. else:
  35. # For the other rows, we only return sample scatter
  36. if column == 0:
  37. return "SANS2D00022024"
  38. else:
  39. return ""
  40. mock_listener_list = []
  41. def on_load_user_file_mock():
  42. for listener in mock_listener_list:
  43. listener.on_user_file_load()
  44. def on_load_batch_file_mock():
  45. for listener in mock_listener_list:
  46. listener.on_batch_file_load()
  47. def add_listener_mock(listener):
  48. mock_listener_list.append(listener)
  49. def create_mock_view(user_file_path, batch_file_path=None):
  50. view = mock.create_autospec(SANSDataProcessorGui, spec_set=False)
  51. view.get_user_file_path = mock.Mock(return_value=user_file_path)
  52. view.get_cell = mock.MagicMock(side_effect=get_cell_mock)
  53. view.get_batch_file_path = mock.MagicMock(return_value=batch_file_path)
  54. view.get_number_of_rows = mock.MagicMock(return_value=2)
  55. # Add the settings diagnostic mock
  56. settings_diagnostic_tab = create_mock_settings_diagnostic_tab()
  57. view.settings_diagnostic_tab = settings_diagnostic_tab
  58. # Add the masking table view
  59. masking_table = create_mock_masking_table()
  60. view.masking_table = masking_table
  61. # ---------------------
  62. # Mocking properties
  63. # ---------------------
  64. _event_slices = mock.PropertyMock(return_value="")
  65. type(view).event_slices = _event_slices
  66. _merge_scale = mock.PropertyMock(return_value=1.)
  67. type(view).merge_scale = _merge_scale
  68. _merge_shift = mock.PropertyMock(return_value=0.)
  69. type(view).merge_shift = _merge_shift
  70. _merge_q_range_start = mock.PropertyMock(return_value=None)
  71. type(view).merge_q_range_start = _merge_q_range_start
  72. _merge_q_range_stop = mock.PropertyMock(return_value=None)
  73. type(view).merge_q_range_stop = _merge_q_range_stop
  74. _merge_q_range_stop = mock.PropertyMock(return_value=None)
  75. type(view).merge_q_range_stop = _merge_q_range_stop
  76. _sample_height = mock.PropertyMock(return_value=None)
  77. type(view).sample_height = _sample_height
  78. _sample_width = mock.PropertyMock(return_value=None)
  79. type(view).sample_width = _sample_width
  80. _sample_thickness = mock.PropertyMock(return_value=None)
  81. type(view).sample_thickness = _sample_thickness
  82. _sample_shape = mock.PropertyMock(return_value=None)
  83. type(view).sample_shape = _sample_shape
  84. _pixel_adjustment_det_1 = mock.PropertyMock(return_value="")
  85. type(view).pixel_adjustment_det_1 = _pixel_adjustment_det_1
  86. _pixel_adjustment_det_2 = mock.PropertyMock(return_value="")
  87. type(view).pixel_adjustment_det_2 = _pixel_adjustment_det_2
  88. _wavelength_adjustment_det_1 = mock.PropertyMock(return_value="")
  89. type(view).wavelength_adjustment_det_1 = _wavelength_adjustment_det_1
  90. _wavelength_adjustment_det_2 = mock.PropertyMock(return_value="")
  91. type(view).wavelength_adjustment_det_2 = _wavelength_adjustment_det_2
  92. _gravity_extra_length = mock.PropertyMock(return_value=None)
  93. type(view).gravity_extra_length = _gravity_extra_length
  94. _q_resolution_source_h = mock.PropertyMock(return_value=None)
  95. type(view).q_resolution_source_h = _q_resolution_source_h
  96. _q_resolution_sample_h = mock.PropertyMock(return_value=None)
  97. type(view).q_resolution_sample_h = _q_resolution_sample_h
  98. _q_resolution_source_w = mock.PropertyMock(return_value=None)
  99. type(view).q_resolution_source_w = _q_resolution_source_w
  100. _q_resolution_sample_w = mock.PropertyMock(return_value=None)
  101. type(view).q_resolution_sample_w = _q_resolution_sample_w
  102. _phi_limit_min = mock.PropertyMock(return_value=None)
  103. type(view).phi_limit_min = _phi_limit_min
  104. _phi_limit_max = mock.PropertyMock(return_value=None)
  105. type(view).phi_limit_max = _phi_limit_max
  106. _phi_limit_max = mock.PropertyMock(return_value=None)
  107. type(view).phi_limit_max = _phi_limit_max
  108. _q_1d_step = mock.PropertyMock(return_value=.001)
  109. type(view).q_1d_step = _q_1d_step
  110. _q_1d_step_type = mock.PropertyMock(return_value=RangeStepType.Lin)
  111. type(view)._q_1d_step_type = _q_1d_step_type
  112. return view, settings_diagnostic_tab, masking_table
  113. def create_mock_view2(user_file_path, batch_file_path=None):
  114. global mock_listener_list
  115. mock_listener_list = []
  116. view, _, _ = create_mock_view(user_file_path, batch_file_path)
  117. view.add_listener = mock.MagicMock(side_effect=add_listener_mock)
  118. view._on_user_file_load = mock.MagicMock(side_effect=on_load_user_file_mock)
  119. view._on_batch_file_load = mock.MagicMock(side_effect=on_load_batch_file_mock)
  120. _output_mode = mock.PropertyMock(return_value=OutputMode.PublishToADS)
  121. type(view).output_mode = _output_mode
  122. return view
  123. class FakeState(object):
  124. dummy_state = "dummy_state"
  125. def __init__(self):
  126. super(FakeState, self).__init__()
  127. @property
  128. def property_manager(self):
  129. return self.dummy_state
  130. def get_state_for_row_mock(row_index):
  131. return FakeState() if row_index == 3 else ""
  132. def get_state_for_row_mock_with_real_state(row_index):
  133. _ = row_index # noqa
  134. test_director = TestDirector()
  135. return test_director.construct()
  136. def create_run_tab_presenter_mock(use_fake_state=True):
  137. presenter = mock.create_autospec(RunTabPresenter, spec_set=False)
  138. presenter.get_row_indices = mock.MagicMock(return_value=[0, 1, 3])
  139. if use_fake_state:
  140. presenter.get_state_for_row = mock.MagicMock(side_effect=get_state_for_row_mock)
  141. else:
  142. presenter.get_state_for_row = mock.MagicMock(side_effect=get_state_for_row_mock_with_real_state)
  143. return presenter
  144. class FakeParentPresenter(object):
  145. def __init__(self):
  146. super(FakeParentPresenter, self).__init__()
  147. def get_row_indices(self):
  148. # We assume that row 2 is empty
  149. return [0, 1, 3]
  150. def get_state_for_row(self, row_index):
  151. return FakeState() if row_index == 3 else ""