tests/dicom/dicomElementsWrapper.test.js

/**
 * Tests for the 'dicom/dicomElementsWrapper.js' file.
 */
/** @module tests/dicom */
// Do not warn if these variables were not defined before.
/* global QUnit */
QUnit.module('dicom');

/**
 * Tests for {@link dwv.dicom.DicomElementsWrapper} using simple DICOM data.
 * Using remote file for CI integration.
 *
 * @function module:tests/dicom~dicomElementsWrapper
 */
QUnit.test('Test simple DICOM wrapping.', function (assert) {
  var done = assert.async();

  var request = new XMLHttpRequest();
  var url = '/tests/data/dwv-test-simple.dcm';
  request.open('GET', url, true);
  request.responseType = 'arraybuffer';
  request.onerror = function (event) {
    console.log(event);
  };
  request.onload = function (/*event*/) {
    assert.ok((this.response.byteLength !== 0), 'Got a response.');

    // parse DICOM
    var dicomParser = new dwv.dicom.DicomParser();
    dicomParser.parse(this.response);

    // wrapped tags
    var tags = dicomParser.getDicomElements();
    // dump to table
    var table = dwv.utils.objectToArray(tags.dumpToObject());

    // regression table
    var teoTable = [
      {
        name: 'FileMetaInformationGroupLength',
        value: '27',
        group: '0x0002',
        element: '0x0000',
        vr: 'UL',
        vl: 4
      },
      {
        name: 'TransferSyntaxUID',
        value: '1.2.840.10008.1.2.1',
        group: '0x0002',
        element: '0x0010',
        vr: 'UI',
        vl: 19
      },
      {
        name: 'Modality',
        value: 'MR',
        group: '0x0008',
        element: '0x0060',
        vr: 'CS',
        vl: 2
      },
      {
        name: 'PatientName',
        value: 'dwv-patient-name',
        group: '0x0010',
        element: '0x0010',
        vr: 'PN',
        vl: 16
      },
      {
        name: 'PerformingPhysicianName',
        value: '(no value available)',
        group: '0x0008',
        element: '0x1050',
        vr: 'PN',
        vl: 0
      },
      {
        name: 'dBdt',
        value: '0',
        group: '0x0018',
        element: '0x1318',
        vr: 'DS',
        vl: 1
      },
      {
        name: 'PhotometricInterpretation',
        value: 'MONOCHROME2',
        group: '0x0028',
        element: '0x0004',
        vr: 'CS',
        vl: 11
      },
      {
        name: 'SamplesPerPixel',
        value: '1',
        group: '0x0028',
        element: '0x0002',
        vr: 'US',
        vl: 2
      },
      {
        name: 'PixelRepresentation',
        value: '0',
        group: '0x0028',
        element: '0x0103',
        vr: 'US',
        vl: 2
      },
      {
        name: 'Rows',
        value: '32',
        group: '0x0028',
        element: '0x0010',
        vr: 'US',
        vl: 2
      },
      {
        name: 'Columns',
        value: '32',
        group: '0x0028',
        element: '0x0011',
        vr: 'US',
        vl: 2
      },
      {
        name: 'BitsAllocated',
        value: '16',
        group: '0x0028',
        element: '0x0100',
        vr: 'US',
        vl: 2
      },
      {
        name: 'BitsStored',
        value: '12',
        group: '0x0028',
        element: '0x0101',
        vr: 'US',
        vl: 2
      },
      {
        name: 'HighBit',
        value: '11',
        group: '0x0028',
        element: '0x0102',
        vr: 'US',
        vl: 2
      },
      {
        name: 'ReferencedImageSequence',
        value: [
          [
            {
              element: '0x1150',
              group: '0x0008',
              name: 'ReferencedSOPClassUID',
              value: '1.2.840.10008.5.1.4.1.1.4',
              vl: 25,
              vr: 'UI'
            },
            {
              element: '0x1155',
              group: '0x0008',
              name: 'ReferencedSOPInstanceUID',
              value: '1.3.12.2.1107.5.2.32.35162.2012021515511672669154094',
              vl: 52,
              vr: 'UI'
            }
          ]
        ],
        group: '0x0008',
        element: '0x1140',
        vr: 'SQ',
        vl: 101
      },
      {
        name: 'PixelData',
        value: '...',
        group: '0x7FE0',
        element: '0x0010',
        vr: 'OW',
        vl: 2060
      }
    ];

    // test
    var len = table.length;
    assert.equal(len, teoTable.length, 'dumpToTable length');

    // special pixel data case: browsers have different toString
    for (var i = 0; i < len; ++i) {
      if (table[i].name === 'PixelData' &&
        table[i].value === '[object Uint16Array]') {
        table[i].value = '...';
      }
    }
    assert.deepEqual(table, teoTable, 'dumpToTable content');

    // finish async test
    done();
  };
  request.send(null);
});