diff --git a/test/meson.build b/test/meson.build index 924202088..1502c12fb 100644 --- a/test/meson.build +++ b/test/meson.build @@ -9,6 +9,8 @@ tests = [ 'book', 'manager', 'opds_catalog', + 'reader', + 'searcher' ] if build_machine.system() != 'windows' diff --git a/test/reader.cpp b/test/reader.cpp new file mode 100644 index 000000000..2c25207dc --- /dev/null +++ b/test/reader.cpp @@ -0,0 +1,62 @@ + +#include "gtest/gtest.h" +#include "../include/reader.h" +#include "zim/archive.h" + +namespace kiwix +{ + /** + * This test file is written primarily to demonstrate how Reader is simply a + * wrapper over an archive. We will be dropping this wrapper soon. + **/ + TEST (Reader, archiveWrapper) { + Reader reader("./test/zimfile.zim"); + zim::Archive archive = *reader.getZimArchive(); + + std::ostringstream s; + s << archive.getUuid(); + + ASSERT_EQ(reader.getId(), s.str()); + ASSERT_EQ(reader.getGlobalCount(), archive.getEntryCount()); + ASSERT_EQ(reader.getMainPage().getTitle(), archive.getMainEntry().getTitle()); + ASSERT_EQ(reader.hasFulltextIndex(), archive.hasFulltextIndex()); + ASSERT_NO_THROW(reader.getRandomPage()); + } + + TEST (Reader, getFunctions) { + zim::Archive archive("./test/zimfile.zim"); + Reader reader("./test/zimfile.zim"); + + auto archiveEntry = archive.getRandomEntry(); + ASSERT_TRUE(reader.pathExists(archiveEntry.getPath())); + auto readerEntry = reader.getEntryFromPath(archiveEntry.getPath()); + ASSERT_EQ(readerEntry.getTitle(), archiveEntry.getTitle()); + + ASSERT_FALSE(reader.pathExists("invalidEntryPath")); + ASSERT_THROW(reader.getEntryFromPath("invalidEntryPath"), NoEntry); + + readerEntry = reader.getEntryFromTitle(archiveEntry.getTitle()); + ASSERT_EQ(readerEntry.getTitle(), archiveEntry.getTitle()); + } + + TEST (Reader, suggestions) { + Reader reader("./test/zimfile.zim"); + SuggestionsList_t suggestions; + reader.searchSuggestionsSmart("The Genius", 4, suggestions); + + std::vector suggestionResult, expectedResult; + std::string suggestionTitle; + for (auto it = suggestions.begin(); it != suggestions.end(); it++) { + suggestionResult.push_back(it->getTitle()); + } + + expectedResult = { + "The Genius After Hours", + "The Genius Hits the Road", + "The Genius Sings the Blues", + "The Genius of Ray Charles" + }; + + ASSERT_EQ(suggestionResult, expectedResult); + } +} \ No newline at end of file diff --git a/test/searcher.cpp b/test/searcher.cpp new file mode 100644 index 000000000..24beefc5d --- /dev/null +++ b/test/searcher.cpp @@ -0,0 +1,25 @@ +#include "gtest/gtest.h" +#include "../include/searcher.h" +#include "../include/reader.h" + +namespace kiwix +{ + +TEST(Searcher, search) { + Reader reader("./test/example.zim"); + + Searcher searcher; + searcher.add_reader(&reader); + ASSERT_EQ(searcher.get_reader(0)->getTitle(), reader.getTitle()); + + searcher.search("wiki", 0, 2); + searcher.restart_search(); + ASSERT_EQ(searcher.getEstimatedResultCount(), (unsigned int)2); + + auto result = searcher.getNextResult(); + ASSERT_EQ(result->get_title(), "FreedomBox for Communities/Offline Wikipedia - Wikibooks, open books for an open world"); + result = searcher.getNextResult(); + ASSERT_EQ(result->get_title(), "Wikibooks"); +} + +} \ No newline at end of file