| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | /*=========================================================================  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.apache.org/licenses/LICENSE-2.0.txt  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 <QCoreApplication>#include <QDir>// ctkDICOMCore includes#include "ctkDICOMDatabase.h"// STD includes#include <iostream>#include <cstdlib>int ctkDICOMDatabaseTest4( int argc, char * argv [] ){  QCoreApplication app(argc, argv);  if (argc < 2)    {    std::cerr << "ctkDICOMDatabaseTest2: missing dicom filePath argument";    std::cerr << std::endl;    return EXIT_FAILURE;    }  QString dicomFilePath(argv[1]);  ctkDICOMDatabase database;  QDir databaseDirectory = QDir::temp();  databaseDirectory.remove("ctkDICOMDatabase.sql");  databaseDirectory.remove("ctkDICOMTagCache.sql");  QFileInfo databaseFile(databaseDirectory, QString("database.test"));  database.openDatabase(databaseFile.absoluteFilePath());  bool res = database.initializeDatabase();  if (!res)    {    std::cerr << "ctkDICOMDatabase::initializeDatabase() failed." << std::endl;    return EXIT_FAILURE;    }  //  // Basic test:  // - insert the file specified on the command line  // - ask for tag values and compare to known results  //  QString instanceUID("1.2.840.113619.2.135.3596.6358736.4843.1115808177.83");  QString tag("0008,103e");  QString badTag("9999,9999");  //  // Test the precache feature of the database  //  if (database.cachedTag(instanceUID, tag) != QString(""))    {    std::cerr << "ctkDICOMDatabase: tag cache should return empty string for unknown instance tag" << std::endl;    return EXIT_FAILURE;    }  if (database.cachedTag(instanceUID, badTag) != QString(""))    {    std::cerr << "ctkDICOMDatabase: bad tag cache should return empty string for unknown instance tag" << std::endl;    return EXIT_FAILURE;    }  QStringList tagsToPrecache;  tagsToPrecache << tag;  database.setTagsToPrecache(tagsToPrecache);  if (database.tagsToPrecache() != tagsToPrecache)    {    std::cerr << "ctkDICOMDatabase: tags to precache not correct" << std::endl;    return EXIT_FAILURE;    }  // check the insert timestamp  QDateTime beforeInsert = QDateTime::currentDateTime();  std::cerr << "Current dateTime " << beforeInsert.toString().toStdString() << std::endl;  database.insert(dicomFilePath, false, false);  QDateTime insertTimeStamp = database.insertDateTimeForInstance(instanceUID);  std::cerr << "Instance inserted " << insertTimeStamp.toString().toStdString() << std::endl;  QString filePath = database.fileForInstance(instanceUID);  std::cerr << "Instance file " << filePath.toStdString() << std::endl;  int elapsed = beforeInsert.secsTo(insertTimeStamp);  if (elapsed > 1)    {    std::cerr << "ctkDICOMDatabase: Took more than a second to insert the file." << std::endl;    return EXIT_FAILURE;    }  // check for series description in tag cache  QString knownSeriesDescription("3D Cor T1 FAST IR-prepped GRE");  QString cachedTag = database.cachedTag(instanceUID, tag);  if (cachedTag != knownSeriesDescription)    {    std::cerr << "ctkDICOMDatabase: tag cache should return known value for instance" << std::endl;    return EXIT_FAILURE;    }  if (database.instanceValue(instanceUID, tag) != knownSeriesDescription)    {    std::cerr << "ctkDICOMDatabase: database should return known value for instance" << std::endl;    return EXIT_FAILURE;    }  if (database.instanceValue(instanceUID, badTag) != QString(""))    {    std::cerr << "ctkDICOMDatabase: bad tag should have empty value" << std::endl;    return EXIT_FAILURE;    }  if (database.cachedTag(instanceUID, badTag) != QString("__TAG_NOT_IN_INSTANCE__"))    {    std::cerr << "ctkDICOMDatabase: bad tag should have sentinal value in cache" << std::endl;    return EXIT_FAILURE;    }  database.closeDatabase();  std::cerr << "Database is in " << databaseDirectory.path().toStdString() << std::endl;  return EXIT_SUCCESS;}
 |