22 """Helpers for writing tests against subclassses of Instrument.
24 These are not tests themselves, but can be subclassed (plus unittest.TestCase)
25 to get a functional test of an Instrument.
33 from lsst.daf.butler
import Registry
34 from lsst.daf.butler
import RegistryConfig
37 @dataclasses.dataclass
39 """Values to test against in sublcasses of `InstrumentTests`.
43 """The name of the Camera this instrument describes."""
46 """The number of detectors in the Camera."""
48 firstDetectorName: str
49 """The name of the first detector in the Camera."""
51 physical_filters: {str}
52 """A subset of the physical filters should be registered."""
56 """Tests of sublcasses of Instrument.
58 TestCase subclasses must derive from this, then `TestCase`, and override
59 ``data`` and ``instrument``.
63 """`InstrumentTestData` containing the values to test against."""
66 """The `~lsst.obs.base.Instrument` to be tested."""
69 self.assertEqual(self.
instrumentinstrument.getName(), self.
datadata.name)
72 """Test that getCamera() returns a reasonable Camera definition.
75 self.assertEqual(camera.getName(), self.
instrumentinstrument.getName())
76 self.assertEqual(len(camera), self.
datadata.nDetectors)
77 self.assertEqual(next(iter(camera)).getName(), self.
datadata.firstDetectorName)
80 """Test that register() sets appropriate Dimensions.
82 registryConfig = RegistryConfig()
83 registryConfig[
"db"] =
"sqlite://"
84 registry = Registry.createFromConfig(registryConfig)
86 self.assertFalse(registry.queryDataIds([
"instrument"]).toSequence())
87 self.assertFalse(registry.queryDataIds([
"detector"]).toSequence())
88 self.assertFalse(registry.queryDataIds([
"physical_filter"]).toSequence())
92 instrumentDataIds = registry.queryDataIds([
"instrument"]).toSequence()
93 self.assertEqual(len(instrumentDataIds), 1)
94 instrumentNames = {dataId[
"instrument"]
for dataId
in instrumentDataIds}
95 self.assertEqual(instrumentNames, {self.
datadata.name})
96 detectorDataIds = registry.queryDataIds([
"detector"]).expanded().toSequence()
97 self.assertEqual(len(detectorDataIds), self.
datadata.nDetectors)
98 detectorNames = {dataId.records[
"detector"].full_name
for dataId
in detectorDataIds}
99 self.assertIn(self.
datadata.firstDetectorName, detectorNames)
100 physicalFilterDataIds = registry.queryDataIds([
"physical_filter"]).toSequence()
101 filterNames = {dataId[
'physical_filter']
for dataId
in physicalFilterDataIds}
102 self.assertGreaterEqual(filterNames, self.
datadata.physical_filters)
105 registeredInstrument = Instrument.fromName(self.
instrumentinstrument.getName(), registry)
106 self.assertEqual(type(registeredInstrument), type(self.
instrumentinstrument))
112 factory = self.
instrumentinstrument.makeDataIdTranslatorFactory()
113 self.assertIsInstance(factory, TranslatorFactory)
def testMakeTranslatorFactory(self)