123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
- /*=========================================================================
- Library: CTK
- Copyright (c) Kitware Inc.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.commontk.org/LICENSE
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- =========================================================================*/
- // Qt includes
- #include <QApplication>
- #include <QComboBox>
- #include <QTest>
- // CTK includes
- #include "ctkDICOMDatabase.h"
- #include "ctkDICOMBrowser.h"
- #include "ctkFileDialog.h"
- #include "ctkScopedCurrentDir.h"
- #include "ctkTest.h"
- #include "ctkUtils.h"
- //-----------------------------------------------------------------------------
- class ctkDICOMBrowserTester: public QObject
- {
- Q_OBJECT
- private slots:
- void initTestCase();
- void init();
- void testDefaults();
- void testDatabaseDirectory();
- void testImportDirectoryMode();
- void testImportDirectories();
- void testImportDirectories_data();
- void testImportDirectory();
- void testImportDirectory_data();
- // Deprecated
- void testOnImportDirectory();
- void testOnImportDirectory_data();
- private:
- void _testImportCommon(ctkDICOMBrowser& browser);
- QString TemporaryDatabaseDirectoryName;
- QDir DICOMDir;
- };
- // ----------------------------------------------------------------------------
- void ctkDICOMBrowserTester::initTestCase()
- {
- // Get data directory from environment
- QDir dataDir = QDir(
- QProcessEnvironment::systemEnvironment().value("CTKData_DIR", ""));
- QVERIFY(dataDir.exists());
- this->DICOMDir = dataDir.filePath("Data/DICOM");
- QVERIFY(this->DICOMDir.exists());
- }
- // ----------------------------------------------------------------------------
- void ctkDICOMBrowserTester::init()
- {
- // If any, remove default ./ctkDICOM-Database directory
- {
- ctkScopedCurrentDir scopedCurrentDir(QDir::tempPath());
- ctk::removeDirRecursively("./ctkDICOM-Database");
- QCOMPARE(QFileInfo("./ctkDICOM-Database").isDir(), false);
- }
- // Generate a new database directory name
- this->TemporaryDatabaseDirectoryName =
- QString("ctkDICOMBrowserTest.%1.DICOM-Database").arg(QTime::currentTime().toString("hhmmsszzz"));
- }
- // ----------------------------------------------------------------------------
- void ctkDICOMBrowserTester::testDefaults()
- {
- // Clear left over settings
- QSettings().remove(ctkDICOMBrowser::databaseDirectorySettingsKey());
- ctkDICOMBrowser browser;
- QVERIFY(QFileInfo("./ctkDICOM-Database").isDir());
- QVERIFY(QFileInfo("./ctkDICOM-Database/ctkDICOM.sql").isFile());
- QVERIFY(QFileInfo("./ctkDICOM-Database/ctkDICOMTagCache.sql").isFile());
- QCOMPARE(ctkDICOMBrowser::databaseDirectorySettingsKey(), QString("DatabaseDirectory"));
- QCOMPARE(browser.databaseDirectory(), QString("./ctkDICOM-Database"));
- QVERIFY(browser.database() != 0);
- QCOMPARE(browser.tagsToPrecache(), QStringList());
- QVERIFY(browser.dicomTableManager() != 0);
- QCOMPARE(browser.displayImportSummary(), true);
- QCOMPARE(browser.patientsAddedDuringImport(), 0);
- QCOMPARE(browser.studiesAddedDuringImport(), 0);
- QCOMPARE(browser.seriesAddedDuringImport(), 0);
- QCOMPARE(browser.instancesAddedDuringImport(), 0);
- QCOMPARE(browser.importDirectoryMode(), ctkDICOMBrowser::ImportDirectoryAddLink);
- }
- // ----------------------------------------------------------------------------
- void ctkDICOMBrowserTester::testDatabaseDirectory()
- {
- // Check that value from setting is picked up
- {
- QSettings().setValue(ctkDICOMBrowser::databaseDirectorySettingsKey(), this->TemporaryDatabaseDirectoryName);
- QCOMPARE(QFileInfo(this->TemporaryDatabaseDirectoryName).isDir(), false);
- ctkDICOMBrowser browser;
- QCOMPARE(QFileInfo(browser.databaseDirectory()).absoluteFilePath(),
- QFileInfo(this->TemporaryDatabaseDirectoryName).absoluteFilePath());
- QVERIFY(QDir(browser.databaseDirectory()).exists());
- }
- }
- // ----------------------------------------------------------------------------
- void ctkDICOMBrowserTester::testImportDirectoryMode()
- {
- QSettings().setValue(ctkDICOMBrowser::databaseDirectorySettingsKey(), this->TemporaryDatabaseDirectoryName);
- ctkDICOMBrowser browser;
- browser.setImportDirectoryMode(ctkDICOMBrowser::ImportDirectoryCopy);
- QCOMPARE(browser.importDirectoryMode(), ctkDICOMBrowser::ImportDirectoryCopy);
- browser.setImportDirectoryMode(ctkDICOMBrowser::ImportDirectoryAddLink);
- QCOMPARE(browser.importDirectoryMode(), ctkDICOMBrowser::ImportDirectoryAddLink);
- QComboBox* comboBox = browser.importDialog()->bottomWidget()->findChild<QComboBox*>();
- comboBox->setCurrentIndex(comboBox->findData(ctkDICOMBrowser::ImportDirectoryCopy));
- QCOMPARE(browser.importDirectoryMode(), ctkDICOMBrowser::ImportDirectoryCopy);
- comboBox->setCurrentIndex(comboBox->findData(ctkDICOMBrowser::ImportDirectoryAddLink));
- QCOMPARE(browser.importDirectoryMode(), ctkDICOMBrowser::ImportDirectoryAddLink);
- }
- // ----------------------------------------------------------------------------
- void ctkDICOMBrowserTester::testImportDirectories()
- {
- QFETCH(QStringList, directories);
- QFETCH(ctkDICOMBrowser::ImportDirectoryMode, importDirectoryMode);
- QSettings().setValue(ctkDICOMBrowser::databaseDirectorySettingsKey(), this->TemporaryDatabaseDirectoryName);
- ctkDICOMBrowser browser;
- browser.setDisplayImportSummary(false);
- browser.importDirectories(directories, /* mode= */ importDirectoryMode);
- this->_testImportCommon(browser);
- }
- // ----------------------------------------------------------------------------
- void ctkDICOMBrowserTester::_testImportCommon(ctkDICOMBrowser& browser)
- {
- QFETCH(int, expectedImporedPatients);
- QFETCH(int, expectedImporedStudies);
- QFETCH(int, expectedImporedSeries);
- QFETCH(int, expectedImporedInstances);
- QCOMPARE(browser.patientsAddedDuringImport(), expectedImporedPatients);
- QCOMPARE(browser.studiesAddedDuringImport(), expectedImporedStudies);
- QCOMPARE(browser.seriesAddedDuringImport(), expectedImporedSeries);
- QCOMPARE(browser.instancesAddedDuringImport(), expectedImporedInstances);
- QFETCH(int, expectedTotalPatients);
- QFETCH(int, expectedTotalStudies);
- QFETCH(int, expectedTotalSeries);
- QFETCH(int, expectedTotalInstances);
- int currentPatientCount = 0;
- int currentStudyCount = 0;
- int currentSerieCount = 0;
- int currentInstanceCount = 0;
- QStringList patients = browser.database()->patients();
- currentPatientCount += patients.count();
- foreach(const QString& patient, patients)
- {
- QStringList studies = browser.database()->studiesForPatient(patient);
- currentStudyCount += studies.count();
- foreach(const QString& study, studies)
- {
- QStringList series = browser.database()->seriesForStudy(study);
- currentSerieCount += series.count();
- foreach(const QString& serie, series)
- {
- QStringList instances = browser.database()->instancesForSeries(serie);
- currentInstanceCount += instances.count();
- }
- }
- }
- QCOMPARE(currentPatientCount, expectedTotalPatients);
- QCOMPARE(currentStudyCount, expectedTotalStudies);
- QCOMPARE(currentSerieCount, expectedTotalSeries);
- QCOMPARE(currentInstanceCount, expectedTotalInstances);
- }
- // ----------------------------------------------------------------------------
- void ctkDICOMBrowserTester::testImportDirectories_data()
- {
- this->testImportDirectory_data();
- }
- // ----------------------------------------------------------------------------
- void ctkDICOMBrowserTester::testImportDirectory()
- {
- QFETCH(QStringList, directories);
- QFETCH(ctkDICOMBrowser::ImportDirectoryMode, importDirectoryMode);
- QSettings().setValue(ctkDICOMBrowser::databaseDirectorySettingsKey(), this->TemporaryDatabaseDirectoryName);
- ctkDICOMBrowser browser;
- browser.setDisplayImportSummary(false);
- browser.importDirectory(directories[0], /* mode= */ importDirectoryMode);
- this->_testImportCommon(browser);
- }
- // ----------------------------------------------------------------------------
- void ctkDICOMBrowserTester::testImportDirectory_data()
- {
- QTest::addColumn<QStringList>("directories");
- QTest::addColumn<ctkDICOMBrowser::ImportDirectoryMode>("importDirectoryMode");
- QTest::addColumn<int>("expectedImporedPatients");
- QTest::addColumn<int>("expectedImporedStudies");
- QTest::addColumn<int>("expectedImporedSeries");
- QTest::addColumn<int>("expectedImporedInstances");
- QTest::addColumn<int>("expectedTotalPatients");
- QTest::addColumn<int>("expectedTotalStudies");
- QTest::addColumn<int>("expectedTotalSeries");
- QTest::addColumn<int>("expectedTotalInstances");
- QTest::newRow("1-MRHEAD")
- << /* directories */ (QStringList() << this->DICOMDir.filePath("MRHEAD"))
- << /* importDirectoryMode */ ctkDICOMBrowser::ImportDirectoryAddLink
- << /* expectedImporedPatients */ 1
- << /* expectedImporedStudies */ 1
- << /* expectedImporedSeries */ 1
- << /* expectedImporedInstances */ 100
- << /* expectedTotalPatients */ 1
- << /* expectedTotalStudies */ 1
- << /* expectedTotalSeries */ 1
- << /* expectedTotalInstances */ 100;
- }
- // ----------------------------------------------------------------------------
- void ctkDICOMBrowserTester::testOnImportDirectory()
- {
- QFETCH(QStringList, directories);
- QFETCH(ctkDICOMBrowser::ImportDirectoryMode, importDirectoryMode);
- QSettings().setValue(ctkDICOMBrowser::databaseDirectorySettingsKey(), this->TemporaryDatabaseDirectoryName);
- ctkDICOMBrowser browser;
- browser.setDisplayImportSummary(false);
- browser.onImportDirectory(directories[0], /* mode= */ importDirectoryMode);
- this->_testImportCommon(browser);
- }
- // ----------------------------------------------------------------------------
- void ctkDICOMBrowserTester::testOnImportDirectory_data()
- {
- this->testImportDirectory_data();
- }
- // ----------------------------------------------------------------------------
- CTK_TEST_MAIN(ctkDICOMBrowserTest)
- #include "moc_ctkDICOMBrowserTest.cpp"
|