public void TestSliceInformationValidation() { ushort highBit = 15; var dicomDataset = CreateValidDicomDatasetSlice(5, 5, 1, 1, new Point3D(), DicomUID.CTImageStorage, highBit); // Valid DICOM slice. DicomSeriesInformationValidator.ValidateSliceInformation(SliceInformation.Create(dicomDataset), new[] { dicomDataset.InternalTransferSyntax }); // Invalid supported transfer syntax Assert.Throws <ArgumentException>(() => DicomSeriesInformationValidator.ValidateSliceInformation(SliceInformation.Create(dicomDataset), new[] { DicomTransferSyntax.DeflatedExplicitVRLittleEndian })); // Add LUT Sequence dicomDataset.Add(new DicomSequence(DicomTag.ModalityLUTSequence, new DicomDataset[0])); Assert.Throws <ArgumentException>(() => DicomSeriesInformationValidator.ValidateSliceInformation(SliceInformation.Create(dicomDataset))); // Remove LUT Sequence and set bits allocated to not 16 dicomDataset.Remove(DicomTag.ModalityLUTSequence); DicomSeriesInformationValidator.ValidateSliceInformation(SliceInformation.Create(dicomDataset)); dicomDataset.AddOrUpdate(new DicomUnsignedShort(DicomTag.BitsAllocated, 12)); Assert.Throws <ArgumentException>(() => DicomSeriesInformationValidator.ValidateSliceInformation(SliceInformation.Create(dicomDataset))); // Set bits allocated to 16, and updated photometric interpation to not MONOCHROME2 dicomDataset.AddOrUpdate(new DicomUnsignedShort(DicomTag.BitsAllocated, 16)); DicomSeriesInformationValidator.ValidateSliceInformation(SliceInformation.Create(dicomDataset)); dicomDataset.AddOrUpdate(new DicomCodeString(DicomTag.PhotometricInterpretation, "INVALID")); Assert.Throws <ArgumentException>(() => DicomSeriesInformationValidator.ValidateSliceInformation(SliceInformation.Create(dicomDataset))); // Set photometric interpation to MONOCHROME2 and change expected samples per pixel dicomDataset.AddOrUpdate(new DicomCodeString(DicomTag.PhotometricInterpretation, DicomSeriesInformationValidator.ExpectedPhotometricInterpretation)); DicomSeriesInformationValidator.ValidateSliceInformation(SliceInformation.Create(dicomDataset)); dicomDataset.AddOrUpdate(new DicomUnsignedShort(DicomTag.SamplesPerPixel, DicomSeriesInformationValidator.ExpectedSamplesPerPixel + 1)); Assert.Throws <ArgumentException>(() => DicomSeriesInformationValidator.ValidateSliceInformation(SliceInformation.Create(dicomDataset))); // Set samples per pixel to 1 and change the modality to not CT dicomDataset.AddOrUpdate(new DicomUnsignedShort(DicomTag.SamplesPerPixel, DicomSeriesInformationValidator.ExpectedSamplesPerPixel)); DicomSeriesInformationValidator.ValidateSliceInformation(SliceInformation.Create(dicomDataset)); dicomDataset.AddOrUpdate(DicomTag.Modality, DicomConstants.MRModality); Assert.Throws <ArgumentException>(() => DicomSeriesInformationValidator.ValidateSliceInformation(SliceInformation.Create(dicomDataset))); // Set modality to CT and change the bits stored to highbit + 2 dicomDataset.AddOrUpdate(DicomTag.Modality, DicomConstants.CTModality); DicomSeriesInformationValidator.ValidateSliceInformation(SliceInformation.Create(dicomDataset)); dicomDataset.AddOrUpdate(new DicomUnsignedShort(DicomTag.BitsStored, (ushort)(highBit + 2))); Assert.Throws <ArgumentException>(() => DicomSeriesInformationValidator.ValidateSliceInformation(SliceInformation.Create(dicomDataset))); }
public void TestVolumeInformationValidation() { var dicomDatasets = CreateValidDicomDatasetVolume(5, 5, 5, 1, 1, 3, new Point3D(), DicomUID.CTImageStorage, 16); var acceptanceTest = new ModerateGeometricAcceptanceTest("Blah1", "Blah2"); // Valid DICOM slice. DicomSeriesInformationValidator.ValidateVolumeInformation( VolumeInformation.Create(dicomDatasets), acceptanceTest, new[] { dicomDatasets[0].InternalTransferSyntax }); // Inconsistent slice information. var dicomDatasets2 = CreateValidDicomDatasetVolume(5, 5, 5, 1, 1, 3, new Point3D(), DicomUID.CTImageStorage, 16); dicomDatasets2[dicomDatasets2.Length - 2].AddOrUpdate(new DicomUnsignedShort(DicomTag.Rows, 234)); var exception = Assert.Throws <ArgumentException>(() => DicomSeriesInformationValidator.ValidateVolumeInformation( VolumeInformation.Create(dicomDatasets2), acceptanceTest)); Assert.IsTrue(exception.Message.Contains("Slice at position '9' has an inconsistent height. Expected: '5', Actual: '234'.")); // Invalid supported transfer syntax Assert.Throws <ArgumentException>(() => DicomSeriesInformationValidator.ValidateVolumeInformation( VolumeInformation.Create(dicomDatasets), acceptanceTest, new[] { DicomTransferSyntax.DeflatedExplicitVRLittleEndian })); // Failing acceptance test Assert.Throws <ArgumentException>(() => DicomSeriesInformationValidator.ValidateVolumeInformation( VolumeInformation.Create(dicomDatasets), new FailingAcceptanceTest())); // Exception testing Assert.Throws <ArgumentNullException>(() => DicomSeriesInformationValidator.ValidateVolumeInformation( VolumeInformation.Create(dicomDatasets), null)); Assert.Throws <ArgumentNullException>(() => DicomSeriesInformationValidator.ValidateVolumeInformation( null, acceptanceTest)); }