def test_copy_measurements_from_phase(self): measurement = (self._create_and_set_measurement( 'mock-measurement-name', 5).doc('mock measurement docstring').with_units( units.Unit('radian')).in_range(1, 10)) # We 'incorrectly' create a measurement with a unicode character as # a python2 string. We don't want mfg_event_converter to guess at it's # encoding but we also don't want to fail after a test on conversion so it # replaces errors with a unicode question mark character. measurement_text = self._create_and_set_measurement('text', b'\xfd') measurement_unicode = self._create_and_set_measurement( 'unicode', u'\ufffa') phase = test_record.PhaseRecord( name='mock-phase-name', descriptor_id=1, codeinfo=self.create_codeinfo(), measurements={ 'mock-measurement-name': measurement, 'text': measurement_text, 'unicode': measurement_unicode, }, ) mfg_event = mfg_event_pb2.MfgEvent() copier = mfg_event_converter.PhaseCopier([phase]) copier.copy_measurements(mfg_event) # Names. created_measurements = sorted(mfg_event.measurement, key=lambda m: m.name) mock_measurement = created_measurements[0] text_measurement = created_measurements[1] unicode_measurement = created_measurements[2] self.assertEqual(mock_measurement.name, u'mock-measurement-name') self.assertEqual(text_measurement.name, u'text') self.assertEqual(unicode_measurement.name, u'unicode') # Basic measurement fields. self.assertEqual(mock_measurement.status, test_runs_pb2.PASS) self.assertEqual(mock_measurement.description, 'mock measurement docstring') self.assertEqual(mock_measurement.parameter_tag[0], 'mock-phase-name') self.assertEqual(mock_measurement.unit_code, test_runs_pb2.Units.UnitCode.Value('RADIAN')) # Measurement value. self.assertEqual(mock_measurement.numeric_value, 5.0) # FFFD is unicode's '?'. This occurs when we can't easily convert a python2 # string to unicode. self.assertEqual(text_measurement.text_value, u'\ufffd') self.assertEqual(unicode_measurement.text_value, u'\ufffa') # Measurement validators. self.assertEqual(mock_measurement.numeric_minimum, 1.0) self.assertEqual(mock_measurement.numeric_maximum, 10.0) self.assertEqual(mock_measurement.name, u'mock-measurement-name') self.assertEqual(mock_measurement.name, u'mock-measurement-name')
def _maybe_make_unit_desc(self, unit_desc): """Return the UnitDescriptor or convert a string to one.""" if isinstance(unit_desc, str) or unit_desc is None: unit_desc = units.Unit(unit_desc) if not isinstance(unit_desc, units.UnitDescriptor): raise TypeError('Invalid units for measurement %s: %s' % (self.name, unit_desc)) return unit_desc
def from_string(cls, string): """Convert a string into a Dimension""" # Note: There is some ambiguity as to whether the string passed is intended # to become a unit looked up by name or suffix, or a Dimension descriptor. if string in units.UNITS_BY_ALL: return cls(description=string, unit=units.Unit(string)) else: return cls(description=string)