def testConfigUniverseGetUnitsForMeasurement(self): folder = unit_lib.UnitFolder('units/anyfolder') namespace = folder.local_namespace namespace.InsertUnit( unit_lib.Unit('degrees_celsius', 'temperature', False)) namespace.InsertUnit(unit_lib.Unit('kelvin', 'temperature', True)) unit_universe = unit_lib.UnitUniverse([folder]) config_universe = presubmit_validate_types_lib.ConfigUniverse( subfield_universe=None, field_universe=None, entity_type_universe=None, state_universe=None, connection_universe=None, unit_universe=unit_universe) units = config_universe.GetUnitsForMeasurement( 'zone_temperature_sensor') self.assertSameElements(['degrees_celsius', 'kelvin'], units) units = config_universe.GetUnitsForMeasurement('temperature_sensor') self.assertSameElements(['degrees_celsius', 'kelvin'], units) units = config_universe.GetUnitsForMeasurement( '/zone_temperature_sensor') self.assertSameElements(['degrees_celsius', 'kelvin'], units) units = config_universe.GetUnitsForMeasurement('/temperature_sensor') self.assertSameElements(['degrees_celsius', 'kelvin'], units) units = config_universe.GetUnitsForMeasurement('pressure_sensor') self.assertIsNone(units) units = config_universe.GetUnitsForMeasurement( 'discharge_fan_lost_power_alarm') self.assertIsNone(units)
def testParseUnitFoldersFromGoodFiles(self): subfield_folders = parse.ParseSubfieldFoldersFromFiles( [self.global_subfields_file, self.local_subfields_file]) subfield_universe = subfield_lib.SubfieldUniverse(subfield_folders) unit_folders = parse.ParseUnitFoldersFromFiles( [self.global_units_file], subfield_universe=subfield_universe) self.assertTrue(unit_folders) for folder in unit_folders: self.assertEmpty(folder.GetFindings()) current_units = folder.local_namespace.GetUnitsForMeasurement( 'current') temperature_units = folder.local_namespace.GetUnitsForMeasurement( 'temperature') if not folder.local_namespace.namespace: # global namespace self.assertEqual(current_units['amperes'], unit_lib.Unit('amperes', True)) self.assertEqual(current_units['milliamperes'], unit_lib.Unit('milliamperes')) self.assertEqual(temperature_units['kelvins'], unit_lib.Unit('kelvins', True)) self.assertEqual(temperature_units['degrees_celsius'], unit_lib.Unit('degrees_celsius')) self.assertEqual(temperature_units['degrees_fahrenheit'], unit_lib.Unit('degrees_fahrenheit'))
def testParseUnitFoldersFromGoodFiles(self): subfield_folders = parse.ParseSubfieldFoldersFromFiles( [self.global_subfields_file, self.local_subfields_file]) subfield_universe = subfield_lib.SubfieldUniverse(subfield_folders) unit_folders = parse.ParseUnitFoldersFromFiles( [self.global_units_file, self.local_units_file], subfield_universe=subfield_universe) self.assertLen(unit_folders, 2) for folder in unit_folders: self.assertEmpty(folder.GetFindings()) units_map = folder.local_namespace.units if not folder.local_namespace.namespace: # global namespace self.assertEqual(units_map['amperes'], unit_lib.Unit('amperes', 'current', True)) self.assertEqual(units_map['milliamperes'], unit_lib.Unit('milliamperes', 'current')) else: # local namespace self.assertEqual(folder.local_namespace.namespace, 'GOOD') self.assertEqual(units_map['kelvins'], unit_lib.Unit('kelvins', 'temperature', True)) self.assertEqual( units_map['degrees_celsius'], unit_lib.Unit('degrees_celsius', 'temperature')) self.assertEqual( units_map['degrees_fahrenheit'], unit_lib.Unit('degrees_fahrenheit', 'temperature'))
def testUnitUniverseGetFindings(self): context = findings_lib.FileContext('{0}/file.yaml'.format(_GOOD_PATH)) folder = unit_lib.UnitFolder(_GOOD_PATH) folder.AddFinding( findings_lib.InconsistentFileLocationError('', context)) namespace = folder.local_namespace namespace.AddFinding( findings_lib.DuplicateUnitDefinitionError( unit_lib.Unit('unit', 'measurement'), 'namespace')) unit = unit_lib.Unit('unit', 'measurement') unit.AddFinding( findings_lib.UnknownUnitTagError(unit.name, 'tag', context)) namespace.InsertUnit(unit) unit_universe = unit_lib.UnitUniverse([folder]) findings = unit_universe.GetFindings() self.assertLen(findings, 3) self.assertTrue( unit_universe.HasFindingTypes([ findings_lib.InconsistentFileLocationError, findings_lib.DuplicateUnitDefinitionError, findings_lib.UnknownUnitTagError, ])) self.assertFalse(unit_universe.IsValid())
def testUnitFolderAddDuplicateUnitFails(self): folder = unit_lib.UnitFolder(_GOOD_PATH) folder.AddUnit(unit_lib.Unit('unit', 'measurement')) self.assertIn('unit', folder.local_namespace.units) self.assertEmpty(folder.local_namespace.GetFindings()) folder.AddUnit(unit_lib.Unit('unit', 'duplicate')) self.assertIsInstance(folder.local_namespace.GetFindings()[0], findings_lib.DuplicateUnitDefinitionError)
def testUnitEquals(self): unit_one = unit_lib.Unit('unit_one') unit_one_dup = unit_lib.Unit('unit_one') unit_one_standard = unit_lib.Unit('unit_one', True) unit_two = unit_lib.Unit('unit_two') self.assertEqual(unit_one, unit_one_dup) self.assertNotEqual(unit_one, unit_one_standard) self.assertNotEqual(unit_one, unit_two)
def testUnitEquals(self): unit_one = unit_lib.Unit('unit_one', 'measurement') unit_one_dup = unit_lib.Unit('unit_one', 'measurement') unit_one_diff_measurement = unit_lib.Unit('unit_one', 'changed') unit_one_standard = unit_lib.Unit('unit_one', 'measurement', True) unit_two = unit_lib.Unit('unit_two', 'measurement') self.assertEqual(unit_one, unit_one_dup) self.assertNotEqual(unit_one, unit_one_diff_measurement) self.assertNotEqual(unit_one, unit_one_standard) self.assertNotEqual(unit_one, unit_two)
def testUnitUniverseGetUnitsMap(self): folder = unit_lib.UnitFolder(_GOOD_PATH) namespace = folder.local_namespace namespace.InsertUnit( unit_lib.Unit('degrees_celsius', 'temperature', False)) namespace.InsertUnit(unit_lib.Unit('kelvins', 'temperature', True)) unit_universe = unit_lib.UnitUniverse([folder]) units = unit_universe.GetUnitsMap('mynamespace') self.assertIn('degrees_celsius', units) self.assertIn('kelvins', units)
def testUnitUniverseGetUnitsForMeasurement(self): folder = unit_lib.UnitFolder(_GOOD_PATH) namespace = folder.local_namespace namespace.InsertUnit('temperature', unit_lib.Unit('degrees_celsius', False)) namespace.InsertUnit('temperature', unit_lib.Unit('kelvins', True)) namespace.InsertUnit('percent', unit_lib.Unit('percent', True)) unit_universe = unit_lib.UnitUniverse([folder]) units = unit_universe.GetUnitsForMeasurement('temperature', 'mynamespace') self.assertCountEqual(['degrees_celsius', 'kelvins'], units)
def testUnitFolderAddFromConfig(self): doc = { 'temperature': [{ 'kelvins': 'STANDARD' }, 'degrees_celsius'], } folder = unit_lib.UnitFolder(_GOOD_PATH) folder.AddFromConfig([doc], '{0}/file.yaml'.format(_GOOD_PATH)) units = folder.local_namespace.GetUnitsForMeasurement('temperature') self.assertEmpty(folder.GetFindings()) self.assertCountEqual(['kelvins', 'degrees_celsius'], units) self.assertEqual(units['kelvins'], unit_lib.Unit('kelvins', True)) self.assertEqual(units['degrees_celsius'], unit_lib.Unit('degrees_celsius', False))
def testUnitFolderAddInvalidUnitFails(self): folder = unit_lib.UnitFolder(_GOOD_PATH) folder.AddUnit('invalid', unit_lib.Unit('bad-unit')) self.assertIsNone( folder.local_namespace.GetUnitsForMeasurement('invalid')) self.assertIsInstance(folder.GetFindings()[0], findings_lib.InvalidUnitNameError)
def testFindingAddedForInvalidNamespace(self): folder = unit_lib.UnitFolder(_GOOD_PATH) namespace = folder.local_namespace namespace.parent_namespace = unit_lib.UnitNamespace('fake_parent') namespace.InsertUnit('temperature', unit_lib.Unit('degrees_celsius', False)) unit_universe = unit_lib.UnitUniverse([folder]) findings_universe = findings_lib.FindingsUniverse([folder]) findings = findings_universe.GetFindings() self.assertLen(findings, 1) self.assertTrue( unit_universe.HasFindingTypes( [findings_lib.InvalidUnitNamespaceError])) self.assertFalse(unit_universe.IsValid())
def testUnitFolderAddInvalidUnitFails(self): folder = unit_lib.UnitFolder(_GOOD_PATH) folder.AddUnit(unit_lib.Unit('bad-unit', 'invalid')) self.assertNotIn('bad-unit', folder.local_namespace.units) self.assertIsInstance(folder.GetFindings()[0], findings_lib.IllegalCharacterError)
def testUnitFolderAddValidUnit(self): folder = unit_lib.UnitFolder(_GOOD_PATH) folder.AddUnit(unit_lib.Unit('unit', 'measurement')) self.assertIn('unit', folder.local_namespace.units) self.assertEmpty(folder.GetFindings())
def testUnitWithIllegalNameHasFindings(self): unit = unit_lib.Unit('BADUNIT', 'invalid') self.assertIsInstance(unit.GetFindings()[0], findings_lib.IllegalCharacterError)
def testUnitWithIllegalKeyTypeHasFindings(self): unit = unit_lib.Unit(False, 'invalid') self.assertIsInstance(unit.GetFindings()[0], findings_lib.IllegalKeyTypeError)