Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions mobly/asserts.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import re
import unittest

from mobly import logger
from mobly import signals

# Have an instance of unittest.TestCase so we could reuse some logic
Expand All @@ -23,6 +24,21 @@
_pyunit_proxy.maxDiff = None


def _add_key_frame(extras, action, details):
"""Helper to inject key frame data into assertion extras."""
key_frame_data = {
'event_type': 'key_frame',
'action': action,
'timestamp': logger.get_log_line_timestamp(),
'details': details,
}
if extras is None:
extras = {}
if isinstance(extras, dict):
extras['key_frame'] = key_frame_data
return extras


def _call_unittest_assertion(
assertion_method, *args, msg=None, extras=None, **kwargs
):
Expand All @@ -47,6 +63,7 @@ def _call_unittest_assertion(
# This raise statement is outside of the above except statement to
# prevent Python3's exception message from having two tracebacks.
if my_msg is not None:
extras = _add_key_frame(extras, assertion_method.__name__, msg)
raise signals.TestFailure(my_msg, extras=extras)


Expand Down Expand Up @@ -438,6 +455,7 @@ def fail(msg, extras=None):
Raises:
signals.TestFailure: Mark a test as failed.
"""
extras = _add_key_frame(extras, 'fail', msg)
raise signals.TestFailure(msg, extras)


Expand Down
14 changes: 7 additions & 7 deletions tests/mobly/base_test_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -585,7 +585,7 @@ def test_something(self):
self.assertEqual(actual_record.test_name, self.mock_test_name)
self.assertEqual(actual_record.details, MSG_EXPECTED_EXCEPTION)
self.assertTrue(actual_record.end_time)
self.assertIsNone(actual_record.extras)
self.assertIn('key_frame', actual_record.extras)
expected_summary = (
'Error 1, Executed 1, Failed 0, Passed 0, Requested 1, Skipped 0'
)
Expand Down Expand Up @@ -626,7 +626,7 @@ def test_something(self):
actual_record = bt_cls.results.error[0]
self.assertEqual(actual_record.test_name, self.mock_test_name)
self.assertEqual(actual_record.details, MSG_EXPECTED_EXCEPTION)
self.assertIsNone(actual_record.extras)
self.assertIn('key_frame', actual_record.extras)
self.assertFalse(actual_record.extra_errors)
self.assertTrue(actual_record.end_time)
expected_summary = (
Expand Down Expand Up @@ -761,7 +761,7 @@ def test_something(self):
actual_record = bt_cls.results.failed[0]
self.assertEqual(actual_record.test_name, self.mock_test_name)
self.assertEqual(actual_record.details, MSG_EXPECTED_EXCEPTION)
self.assertIsNone(actual_record.extras)
self.assertIn('key_frame', actual_record.extras)
expected_summary = (
'Error 0, Executed 1, Failed 1, Passed 0, Requested 1, Skipped 0'
)
Expand Down Expand Up @@ -935,7 +935,7 @@ def test_something(self):
self.assertIn('on_fail', actual_record.extra_errors)
self.assertEqual(actual_record.test_name, self.mock_test_name)
self.assertEqual(actual_record.details, MSG_EXPECTED_EXCEPTION)
self.assertIsNone(actual_record.extras)
self.assertIn('key_frame', actual_record.extras)
expected_summary = (
'Error 0, Executed 1, Failed 1, Passed 0, Requested 1, Skipped 0'
)
Expand Down Expand Up @@ -985,7 +985,7 @@ def test_something(self):
actual_record.extra_errors['teardown_test'].details,
MSG_EXPECTED_EXCEPTION,
)
self.assertIsNone(actual_record.extra_errors['teardown_test'].extras)
self.assertIn('key_frame', actual_record.extra_errors['teardown_test'].extras)
expected_summary = (
'Error 1, Executed 1, Failed 0, Passed 0, Requested 1, Skipped 0'
)
Expand Down Expand Up @@ -1059,7 +1059,7 @@ def test_something(self):
actual_record.extra_errors['teardown_test'].details,
MSG_EXPECTED_EXCEPTION,
)
self.assertIsNone(actual_record.extra_errors['teardown_test'].extras)
self.assertIn('key_frame', actual_record.extra_errors['teardown_test'].extras)
expected_summary = (
'Error 1, Executed 1, Failed 0, Passed 0, Requested 1, Skipped 0'
)
Expand Down Expand Up @@ -2006,7 +2006,7 @@ def test_func(self):
actual_record = bt_cls.results.failed[0]
self.assertEqual(actual_record.test_name, 'test_func')
self.assertEqual(actual_record.details, 'failed from assert_true')
self.assertIsNone(actual_record.extras)
self.assertIn('key_frame', actual_record.extras)

def test_unpack_userparams_required(self):
"""Missing a required param should raise an error."""
Expand Down