// static Tellico::Data::CollPtr BibtexCollection::convertBookCollection(Tellico::Data::CollPtr coll_) { const QString bibtex = QLatin1String("bibtex"); BibtexCollection* coll = new BibtexCollection(false, coll_->title()); CollPtr collPtr(coll); FieldList fields = coll_->fields(); foreach(FieldPtr fIt, fields) { FieldPtr field(new Field(*fIt)); // if it already has a bibtex property, skip it if(!field->property(bibtex).isEmpty()) { coll->addField(field); continue; } // be sure to set bibtex property before adding it though QString name = field->name(); // this first group has bibtex field names the same as their own field name if(name == QLatin1String("title") || name == QLatin1String("author") || name == QLatin1String("editor") || name == QLatin1String("edition") || name == QLatin1String("publisher") || name == QLatin1String("isbn") || name == QLatin1String("lccn") || name == QLatin1String("url") || name == QLatin1String("language") || name == QLatin1String("pages") || name == QLatin1String("series")) { field->setProperty(bibtex, name); } else if(name == QLatin1String("series_num")) { field->setProperty(bibtex, QLatin1String("number")); } else if(name == QLatin1String("pur_price")) { field->setProperty(bibtex, QLatin1String("price")); } else if(name == QLatin1String("cr_year")) { field->setProperty(bibtex, QLatin1String("year")); } else if(name == QLatin1String("bibtex-id")) { field->setProperty(bibtex, QLatin1String("key")); } else if(name == QLatin1String("keyword")) { field->setProperty(bibtex, QLatin1String("keywords")); } else if(name == QLatin1String("comments")) { field->setProperty(bibtex, QLatin1String("note")); } coll->addField(field); }
void RisTest::testImport() { KUrl url(QString::fromLatin1(KDESRCDIR) + "/data/test.ris"); KUrl::List urls; urls << url; Tellico::Import::RISImporter importer(urls); Tellico::Data::CollPtr coll = importer.collection(); QVERIFY(!coll.isNull()); QCOMPARE(coll->type(), Tellico::Data::Collection::Bibtex); QCOMPARE(coll->entryCount(), 2); QCOMPARE(coll->title(), QLatin1String("Bibliography")); Tellico::Data::EntryPtr entry = coll->entryById(2); QVERIFY(!entry.isNull()); QCOMPARE(entry->field("entry-type"), QLatin1String("article")); QCOMPARE(entry->field("year"), QLatin1String("2002")); QCOMPARE(entry->field("pages"), QLatin1String("1057-1119")); QCOMPARE(Tellico::FieldFormat::splitValue(entry->field("author")).count(), 3); QCOMPARE(Tellico::FieldFormat::splitValue(entry->field("author")).first(), QLatin1String("Koglin,M.")); Tellico::Data::BibtexCollection* bColl = dynamic_cast<Tellico::Data::BibtexCollection*>(coll.data()); QVERIFY(bColl); QCOMPARE(bColl->fieldByBibtexName("entry-type")->name(), QLatin1String("entry-type")); }
void DocumentTest::testImageLocalDirectory() { Tellico::Config::setImageLocation(Tellico::Config::ImagesInLocalDir); // the default collection will use a temporary directory as a local image dir QVERIFY(!Tellico::ImageFactory::localDir().isEmpty()); QString tempDirName; QTemporaryDir tempDir; QVERIFY(tempDir.isValid()); tempDir.setAutoRemove(true); tempDirName = tempDir.path(); QString fileName = tempDirName + "/with-image.tc"; QString imageDirName = tempDirName + "/with-image_files/"; // copy a collection file that includes an image into the temporary directory QVERIFY(QFile::copy(QFINDTESTDATA("data/with-image.tc"), fileName)); Tellico::Data::Document* doc = Tellico::Data::Document::self(); QVERIFY(doc->openDocument(QUrl::fromLocalFile(fileName))); QCOMPARE(Tellico::ImageFactory::localDir(), imageDirName); Tellico::Data::CollPtr coll = doc->collection(); QVERIFY(coll); QCOMPARE(coll->type(), Tellico::Data::Collection::Book); QCOMPARE(coll->title(), QLatin1String("My Books")); QCOMPARE(coll->entries().size(), 1); Tellico::Data::EntryPtr e = coll->entries().at(0); QVERIFY(e); QCOMPARE(e->field(QLatin1String("cover")), QLatin1String("17b54b2a742c6d342a75f122d615a793.jpeg")); // save the document, so the images get copied out of the .tc file into the local image directory QVERIFY(doc->saveDocument(QUrl::fromLocalFile(fileName))); // verify that backup file gets created QVERIFY(QFile::exists(fileName + '~')); // check that the local image directory is created with the image file inside QDir imageDir(imageDirName); QVERIFY(imageDir.exists()); QVERIFY(imageDir.exists(e->field(QLatin1String("cover")))); // clear the internal image cache Tellico::ImageFactory::clean(true); // verify that the images are copied from the old directory when saving to a new file QString fileName2 = tempDirName + "/with-image2.tc"; QString imageDirName2 = tempDirName + "/with-image2_files/"; QVERIFY(doc->saveDocument(QUrl::fromLocalFile(fileName2))); QVERIFY(QFile::exists(fileName2)); QDir imageDir2(imageDirName2); QVERIFY(imageDir2.exists()); QVERIFY(imageDir2.exists(e->field(QLatin1String("cover")))); /*************************************************************************/ /* now also verify image directory when file name has multiple periods */ /* see https://bugs.kde.org/show_bug.cgi?id=348088 */ /* also have to check backwards compatibility with prior behavior */ /*************************************************************************/ QString fileName3 = tempDirName + "/with-image.1.tc"; QString imageDirName3 = tempDirName + "/with-image.1_files/"; // copy the collection file, which no longer contains the images inside QVERIFY(QFile::copy(fileName, fileName3)); QVERIFY(doc->openDocument(QUrl::fromLocalFile(fileName3))); QCOMPARE(Tellico::ImageFactory::localDir(), imageDirName3); QDir imageDir3(imageDirName3); // verify that the images can be loaded from the image directory that does NOT have multiple periods // since that was the behavior prior to the bug being fixed coll = doc->collection(); e = coll->entries().at(0); // image should not be in the next image dir yet since we haven't saved QVERIFY(!imageDir3.exists(e->field(QLatin1String("cover")))); QVERIFY(!Tellico::ImageFactory::imageById(e->field("cover")).isNull()); // now remove the first image from the first image directory, save the document, and verify that // the proper image exists and is written QVERIFY(imageDir.remove(e->field("cover"))); QVERIFY(!imageDir.exists(e->field(QLatin1String("cover")))); QVERIFY(doc->saveDocument(QUrl::fromLocalFile(fileName3))); // now the file should exist in the proper location QVERIFY(imageDir3.exists(e->field(QLatin1String("cover")))); // clear the cache Tellico::ImageFactory::clean(true); QVERIFY(!Tellico::ImageFactory::imageById(e->field("cover")).isNull()); // sanity check, the directory should not exists after QTemporaryDir destruction tempDir.remove(); QVERIFY(!QDir(tempDirName).exists()); }