Skip to content

Commit

Permalink
Pull request #55: Fix uses of get_frame_generator in test suite
Browse files Browse the repository at this point in the history
Merge in HSW_SDK/vmbpy from bugfix/UNISDK-1838-remove-incorrect-uses-of-get-frame-generator to dev

* commit '9ae91973f53af4d317dbd1734703b9024fb57bf8':
  Fix uses of `get_frame_generator` in test suite
  • Loading branch information
NiklasKroeger-AlliedVision committed Dec 14, 2022
2 parents 52fe896 + 9ae9197 commit cc2824e
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 25 deletions.
43 changes: 28 additions & 15 deletions Tests/real_cam_tests/camera_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,32 +201,37 @@ def test_camera_get_local_device_type(self):
def test_camera_frame_generator_limit_set(self):
# Expectation: The Frame generator fetches the given number of images.
with self.cam:
self.assertEqual(len([i for i in self.cam.get_frame_generator(1)]), 1)
self.assertEqual(len([i for i in self.cam.get_frame_generator(7)]), 7)
self.assertEqual(len([i for i in self.cam.get_frame_generator(11)]), 11)
for expected_frames in (1, 7, 11):
count = 0
for _ in self.cam.get_frame_generator(expected_frames):
count += 1
self.assertEqual(count, expected_frames)

def test_camera_frame_generator_error(self):
# Expectation: The Frame generator raises a ValueError on a
# negative limit and the camera raises an ValueError
# if the camera is not opened.

# generator execution must throw if streaming is enabled
with self.cam:
# Check limits
self.assertRaises(ValueError, self.cam.get_frame_generator, 0)
self.assertRaises(ValueError, self.cam.get_frame_generator, -1)
self.assertRaises(ValueError, self.cam.get_frame_generator, 1, 0)
self.assertRaises(ValueError, self.cam.get_frame_generator, 1, -1)
for limits in ((0, ), (-1, ), (1, 0), (1, -1)):
with self.assertRaises(ValueError):
for _ in self.cam.get_frame_generator(*limits):
pass

# generator execution must throw if streaming is enabled
self.cam.start_streaming(dummy_frame_handler, 5)

self.assertRaises(VmbCameraError, self.cam.get_frame)
self.assertRaises(VmbCameraError, next, self.cam.get_frame_generator(1))
with self.assertRaises(VmbCameraError):
for _ in self.cam.get_frame_generator(1):
pass

# Stop Streaming: Everything should be fine.
self.cam.stop_streaming()
self.assertNoRaise(self.cam.get_frame)
self.assertNoRaise(next, self.cam.get_frame_generator(1))
for f in self.cam.get_frame_generator(1):
self.assertIsInstance(f, Frame)

def test_camera_get_frame(self):
# Expectation: Gets single Frame without any exception. Image data must be set.
Expand Down Expand Up @@ -264,7 +269,9 @@ def test_camera_capture_error_outside_vmbsystem_scope(self):
self.vmb._shutdown()

# Access invalid Iterator
self.assertRaises(RuntimeError, next, gener)
with self.assertRaises(RuntimeError):
for _ in gener:
pass

def test_camera_capture_error_outside_camera_scope(self):
# Expectation: Camera access outside of Camera scope must lead to a RuntimeError
Expand All @@ -273,7 +280,9 @@ def test_camera_capture_error_outside_camera_scope(self):
with self.cam:
gener = self.cam.get_frame_generator(1)

self.assertRaises(RuntimeError, next, gener)
with self.assertRaises(RuntimeError):
for _ in gener:
pass

def test_camera_capture_timeout(self):
# Expectation: Camera access outside of Camera scope must lead to a VmbTimeout
Expand Down Expand Up @@ -445,14 +454,16 @@ def invalid_handler_3(cam, stream, frame, extra):
self.assertRaises(TypeError, self.cam.get_features_selected_by, 'No Feature')
self.assertRaises(TypeError, self.cam.get_features_by_type, 0.0)
self.assertRaises(TypeError, self.cam.get_feature_by_name, 0)
self.assertRaises(TypeError, self.cam.get_frame_generator, '3')
self.assertRaises(TypeError, self.cam.get_frame_generator, 1, 'foo')
self.assertRaises(TypeError, self.cam.start_streaming, valid_handler, 'no int')
self.assertRaises(TypeError, self.cam.start_streaming, invalid_handler_1)
self.assertRaises(TypeError, self.cam.start_streaming, invalid_handler_2)
self.assertRaises(TypeError, self.cam.start_streaming, invalid_handler_3)
self.assertRaises(TypeError, self.cam.save_settings, 0, PersistType.All)
self.assertRaises(TypeError, self.cam.save_settings, 'foo.xml', 'false type')
for args in (('3',), (1, 'foo')):
with self.assertRaises(TypeError):
for _ in self.cam.get_frame_generator(*args):
pass

def test_callback_parameter_types(self):
# Expectation: All parameters of the frame callback are of instances of their expected type
Expand Down Expand Up @@ -511,7 +522,6 @@ def test_camera_api_context_sensitivity_inside_context(self):
self.assertRaises(RuntimeError, self.cam.get_features_by_type)
self.assertRaises(RuntimeError, self.cam.get_features_by_category)
self.assertRaises(RuntimeError, self.cam.get_feature_by_name)
self.assertRaises(RuntimeError, self.cam.get_frame_generator)
self.assertRaises(RuntimeError, self.cam.get_frame)
self.assertRaises(RuntimeError, self.cam.start_streaming)
self.assertRaises(RuntimeError, self.cam.stop_streaming)
Expand All @@ -521,3 +531,6 @@ def test_camera_api_context_sensitivity_inside_context(self):
self.assertRaises(RuntimeError, self.cam.set_pixel_format)
self.assertRaises(RuntimeError, self.cam.save_settings)
self.assertRaises(RuntimeError, self.cam.load_settings)
with self.assertRaises(RuntimeError):
for _ in self.cam.get_frame_generator():
pass
25 changes: 15 additions & 10 deletions Tests/real_cam_tests/stream_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,31 +110,36 @@ def test_stream_frame_generator_limit_set(self):
# Expectation: The Frame generator fetches the given number of images.
for stream in self.cam.get_streams():
with self.subTest(f'Stream={stream}'):
self.assertEqual(len([i for i in stream.get_frame_generator(1)]), 1)
self.assertEqual(len([i for i in stream.get_frame_generator(7)]), 7)
self.assertEqual(len([i for i in stream.get_frame_generator(11)]), 11)
for expected_frames in (1, 7, 11):
count = 0
for _ in self.cam.get_frame_generator(expected_frames):
count += 1
self.assertEqual(count, expected_frames)

def test_stream_frame_generator_error(self):
# Expectation: The Frame generator raises a ValueError on a negative limit

# generator execution must throw if streaming is enabled
for stream in self.cam.get_streams():
with self.subTest(f'Stream={stream}'):
# Check limits
self.assertRaises(ValueError, stream.get_frame_generator, 0)
self.assertRaises(ValueError, stream.get_frame_generator, -1)
self.assertRaises(ValueError, stream.get_frame_generator, 1, 0)
self.assertRaises(ValueError, stream.get_frame_generator, 1, -1)
for limits in ((0, ), (-1, ), (1, 0), (1, -1)):
with self.assertRaises(ValueError):
for _ in self.cam.get_frame_generator(*limits):
pass

# generator execution must throw if streaming is enabled
self.cam.start_streaming(dummy_frame_handler, 5)

self.assertRaises(VmbCameraError, stream.get_frame)
self.assertRaises(VmbCameraError, next, stream.get_frame_generator(1))
with self.assertRaises(VmbCameraError):
for _ in stream.get_frame_generator(1):
pass

# Stop Streaming: Everything should be fine.
self.cam.stop_streaming()
self.assertNoRaise(stream.get_frame)
self.assertNoRaise(next, stream.get_frame_generator(1))
for f in self.cam.get_frame_generator(1):
self.assertIsInstance(f, Frame)

def test_stream_get_frame(self):
# Expectation: Gets single Frame without any exception. Image data must be set.
Expand Down

0 comments on commit cc2824e

Please sign in to comment.