Skip to content

Commit 1b5d29f

Browse files
glados-vermacopybara-github
authored andcommitted
Have the assertMeasured methods accept the desired outcome as an optional argument, making them more suitable for parameterized tests.
PiperOrigin-RevId: 853837558
1 parent 7a363fb commit 1b5d29f

2 files changed

Lines changed: 55 additions & 11 deletions

File tree

openhtf/util/test.py

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -925,7 +925,14 @@ def _check_phase(phase_record, strict=False):
925925
_check_phase(phase_record)
926926

927927
@_assert_phase_or_test_record
928-
def assertMeasured(self, phase_record, measurement, value=mock.ANY):
928+
def assertMeasured(
929+
self,
930+
phase_record,
931+
measurement,
932+
value=mock.ANY,
933+
outcome: measurements.Outcome | None = None,
934+
):
935+
"""Asserts that the given measurement is set; value and outcome optional."""
929936
self.assertIn(measurement, phase_record.measurements,
930937
f'Measurement {measurement} not found')
931938
self.assertTrue(
@@ -937,12 +944,22 @@ def assertMeasured(self, phase_record, measurement, value=mock.ANY):
937944
'Measurement %s has wrong value: expected %s, got %s' %
938945
(measurement, value,
939946
phase_record.measurements[measurement].measured_value.value))
947+
if outcome is not None:
948+
self.assertIs(
949+
outcome,
950+
phase_record.measurements[measurement].outcome,
951+
)
940952

941953
@_assert_phase_or_test_record
942954
def assertMeasuredAlmostEqual(
943-
self, phase_record, measurement, value, delta=None
955+
self,
956+
phase_record,
957+
measurement,
958+
value,
959+
delta=None,
960+
outcome: measurements.Outcome | None = None,
944961
):
945-
self.assertMeasured(phase_record, measurement)
962+
self.assertMeasured(phase_record, measurement, mock.ANY, outcome)
946963
measured_value = phase_record.measurements[measurement].measured_value.value
947964
self.assertAlmostEqual(
948965
value,
@@ -956,15 +973,15 @@ def assertMeasuredAlmostEqual(
956973

957974
@_assert_phase_or_test_record
958975
def assertMeasurementPass(self, phase_record, measurement, value=mock.ANY):
959-
self.assertMeasured(phase_record, measurement, value)
960-
self.assertIs(measurements.Outcome.PASS,
961-
phase_record.measurements[measurement].outcome)
976+
self.assertMeasured(
977+
phase_record, measurement, value, measurements.Outcome.PASS
978+
)
962979

963980
@_assert_phase_or_test_record
964981
def assertMeasurementFail(self, phase_record, measurement, value=mock.ANY):
965-
self.assertMeasured(phase_record, measurement, value)
966-
self.assertIs(measurements.Outcome.FAIL,
967-
phase_record.measurements[measurement].outcome)
982+
self.assertMeasured(
983+
phase_record, measurement, value, measurements.Outcome.FAIL
984+
)
968985

969986
@_assert_phase_or_test_record
970987
def assertMeasurementMarginal(

test/util/test_test.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
from unittest import mock
2323

2424
import openhtf
25-
2625
from openhtf import plugs
2726
from openhtf.core import base_plugs
27+
from openhtf.core import measurements
2828
from openhtf.util import test
2929
from openhtf.util import validators
3030

@@ -162,7 +162,17 @@ def _run_my_phase_in_test_asserts(self, mock_my_plug, test_record):
162162
self.assertTestOutcomeCode(test_record, 0xBED)
163163
self.assertNotMeasured(test_record, 'unset_measurement')
164164
self.assertNotMeasured(test_record.phases[-1], 'unset_measurement')
165-
self.assertMeasured(test_record, 'test_measurement', _DO_STUFF_RETVAL)
165+
with self.subTest('assertMeasured no value'):
166+
self.assertMeasured(test_record, 'test_measurement')
167+
with self.subTest('assertMeasured with value'):
168+
self.assertMeasured(test_record, 'test_measurement', _DO_STUFF_RETVAL)
169+
with self.subTest('assertMeasured with value and outcome'):
170+
self.assertMeasured(
171+
test_record,
172+
'test_measurement',
173+
_DO_STUFF_RETVAL,
174+
measurements.Outcome.PASS,
175+
)
166176
self.assertMeasured(test_record, 'othr_measurement', 0xDEAD)
167177
with self.subTest(name='assert_measurement_pass_without_value'):
168178
self.assertMeasurementPass(test_record, 'passes')
@@ -174,10 +184,27 @@ def _run_my_phase_in_test_asserts(self, mock_my_plug, test_record):
174184
self.assertMeasurementFail(test_record, 'fails', 20)
175185
with self.subTest(name='assert_measurement_almost_equal'):
176186
self.assertMeasuredAlmostEqual(test_record, 'numeric_measurement', 10.0)
187+
with self.subTest(name='assert_measurement_almost_equal_with_outcome'):
188+
self.assertMeasuredAlmostEqual(
189+
test_record,
190+
'numeric_measurement',
191+
10.0,
192+
measurements.Outcome.PASS,
193+
)
177194
with self.subTest(name='assert_measurement_almost_equal_with_delta'):
178195
self.assertMeasuredAlmostEqual(
179196
test_record, 'numeric_measurement', 9.5, delta=1.0
180197
)
198+
with self.subTest(
199+
name='assert_measurement_almost_equal_with_delta_and_outcome'
200+
):
201+
self.assertMeasuredAlmostEqual(
202+
test_record,
203+
'numeric_measurement',
204+
9.5,
205+
delta=1.0,
206+
outcome=measurements.Outcome.PASS,
207+
)
181208

182209
def test_execute_phase_or_test_test_with_patched_plugs(self):
183210
self.auto_mock_plugs(MyPlug)

0 commit comments

Comments
 (0)