diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index cbb43d3..26d97e9 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -26,8 +26,7 @@ jobs: - name: Compile Project run: | - ./gradlew generateHeaderFilesFromJavaWrapper - ./gradlew build + ./gradlew generateHeaderFilesFromJavaWrapper build - name: create unit coverage run: | @@ -42,4 +41,4 @@ jobs: with: name: Tests Coverage Report path: | - android-libkiwixbuild/build/coverage-report/ + lib/build/coverage-report/ diff --git a/install_deps.sh b/install_deps.sh index 92cf023..6b58322 100755 --- a/install_deps.sh +++ b/install_deps.sh @@ -15,7 +15,7 @@ printf "${Green}Downloading libzim ${NC}\n" printf "\n${Green}Done! ${NC}\n" printf "${Green}Coping libzim header and so files ${NC}\n" -./gradlew checkCurrentLibzimDate copyLibzimHeaderFiles copyLibzimAndroidArm copyLibzimAndroidArm64 copyLibzimAndroidx86 copyLibzimAndroidx86_64 copyLibzimLinux_x86_64 renameLibzimSoFile +./gradlew checkCurrentLibzimDate checkCurrentLinuxLibzimDate copyLibzimHeaderFiles copyLibzimAndroidArm copyLibzimAndroidArm64 copyLibzimAndroidx86 copyLibzimAndroidx86_64 copyLibzimLinux_x86_64 renameLibzimSoFile printf "\n${Green}Down! ${NC}\n" printf "${Green}Downloading libkiwix ${NC}\n" @@ -23,5 +23,5 @@ printf "${Green}Downloading libkiwix ${NC}\n" printf "\n${Green}Done! ${NC}\n" printf "${Green}Coping libkiwix header and so files ${NC}\n" -./gradlew checkCurrentLibkiwixDate copyLibkiwixHeaderFiles copyLibkiwixAndroidArm copyLibkiwixAndroidArm64 copyLibkiwixAndroidx86 copyLibkiwixAndroidx86_64 copyLibkiwixLinux_x86_64 renameLibkiwixSoFile +./gradlew checkCurrentLibkiwixDate checkCurrentLinuxLibkiwixDate copyLibkiwixHeaderFiles copyLibkiwixAndroidArm copyLibkiwixAndroidArm64 copyLibkiwixAndroidx86 copyLibkiwixAndroidx86_64 copyLibkiwixLinux_x86_64 renameLibkiwixSoFile printf "\n${Green}Done! ${NC}\n" diff --git a/lib/build.gradle b/lib/build.gradle index f4b5115..a063b89 100644 --- a/lib/build.gradle +++ b/lib/build.gradle @@ -79,7 +79,9 @@ ext.libkiwix_base_url = 'https://download.kiwix.org/nightly' ext.libzim_base_url = 'https://download.openzim.org/nightly' // change this date to get latest libzim .so and header files ext.nightly_date_for_libkiwix = project.properties["nightly_date_for_libkiwix"] ?: "" +ext.nightly_date_for_libkiwix_linux = project.properties["nightly_date_for_libkiwix_linux"] ?: "" ext.nightly_date_for_libzim = project.properties["nightly_date_for_libzim"] ?: "" +ext.nightly_date_for_libzim_linux = project.properties["nightly_date_for_libzim_linux"] ?: "" ext.libkiwix_version = project.properties["libkiwix_version"] ?: "" ext.libzim_version = project.properties["libzim_version"] ?: "" @@ -100,6 +102,10 @@ task checkCurrentLibzimDate() { project.ext.set("nightly_date_for_libzim", getDateFromPath(buildDir.path, "libzim_android-arm64-")) } +task checkCurrentLinuxLibzimDate() { + project.ext.set("nightly_date_for_libzim_linux", getDateFromPath(buildDir.path, "libzim_linux-x86_64-")) +} + task unzipLibzim(type: Copy) { // unzip android arm from tarTree(buildDir.path + "/libzim_android-arm.tar.gz") @@ -150,8 +156,8 @@ task copyLibzimAndroidx86_64(type: Copy) { task copyLibzimLinux_x86_64(type: Copy) { // copying linux_x86_64 so file - project.ext.set("libzim_version", getFileFromFolder(buildDir.path + "/libzim_linux-x86_64-" + nightly_date_for_libzim + "/lib/x86_64-linux-gnu/")) - from buildDir.path + "/libzim_linux-x86_64-" + nightly_date_for_libzim + "/lib/x86_64-linux-gnu/" + libzim_version + project.ext.set("libzim_version", getFileFromFolder(buildDir.path + "/libzim_linux-x86_64-" + nightly_date_for_libzim_linux + "/lib/x86_64-linux-gnu/")) + from buildDir.path + "/libzim_linux-x86_64-" + nightly_date_for_libzim_linux + "/lib/x86_64-linux-gnu/" + libzim_version into buildDir.path } @@ -180,6 +186,10 @@ task checkCurrentLibkiwixDate() { project.ext.set("nightly_date_for_libkiwix", getDateFromPath(buildDir.path, "libkiwix_android-arm64-")) } +task checkCurrentLinuxLibkiwixDate() { + project.ext.set("nightly_date_for_libkiwix_linux", getDateFromPath(buildDir.path, "libkiwix_linux-x86_64-")) +} + static String getDateFromPath(String path, String matchesString) { File folder = new File(path) if (folder.exists()) { @@ -241,8 +251,8 @@ task copyLibkiwixAndroidx86_64(type: Copy) { task copyLibkiwixLinux_x86_64(type: Copy) { // copying linux_x86_64 so file - project.ext.set("libkiwix_version", getFileFromFolder(buildDir.path + "/libkiwix_linux-x86_64-" + nightly_date_for_libkiwix + "/lib/x86_64-linux-gnu/")) - from buildDir.path + "/libkiwix_linux-x86_64-" + nightly_date_for_libkiwix + "/lib/x86_64-linux-gnu/" + libkiwix_version + project.ext.set("libkiwix_version", getFileFromFolder(buildDir.path + "/libkiwix_linux-x86_64-" + nightly_date_for_libkiwix_linux + "/lib/x86_64-linux-gnu/")) + from buildDir.path + "/libkiwix_linux-x86_64-" + nightly_date_for_libkiwix_linux + "/lib/x86_64-linux-gnu/" + libkiwix_version into buildDir.path } @@ -267,13 +277,13 @@ task renameLibkiwixSoFile(type: Copy) { task copyBuildKiwixSoFile(type: Copy) { // copying linux_x86_64 so file - from projectDir.path + "/src/androidTests/java/org/kiwix/kiwixlib/libbuildkiwix.so" + from projectDir.path + "/src/test/libbuildkiwix.so" into buildDir.path } task createCodeCoverageReport(type: Exec) { - workingDir "${projectDir}/src/androidTests/java/org/kiwix/kiwixlib/" - commandLine 'sh', '-c', "bash 'compile_and_run_test.sh' ${buildDir}/libs/*app*.jar $buildDir" + workingDir "${projectDir}/src/test/" + commandLine 'sh', '-c', "bash 'compile_and_run_test.sh' ${buildDir}/libs/*lib*.jar $buildDir" } task checkCurrentJavaVersion() { @@ -285,7 +295,7 @@ task checkCurrentJavaVersion() { task generateHeaderFilesFromJavaWrapper(type: Exec) { workingDir "${projectDir}/src/main/java/org/kiwix/" - commandLine 'bash', '-c', "javac -h ${buildDir}/include/javah_generated/ -d ${buildDir}/libzim/ ${getLibzimFiles()} ${getLibkiwixFiles()}" + commandLine 'bash', '-c', "javac -h ${buildDir}/include/javah_generated/ -d ${projectDir}/src/test/ ${getLibzimFiles()} ${getLibkiwixFiles()}" } String getLibkiwixFiles() { diff --git a/lib/src/main/cpp/libkiwix/library.cpp b/lib/src/main/cpp/libkiwix/library.cpp index e27e60d..cac6930 100644 --- a/lib/src/main/cpp/libkiwix/library.cpp +++ b/lib/src/main/cpp/libkiwix/library.cpp @@ -97,8 +97,14 @@ METHOD(jobjectArray, getBookmarks, jboolean onlyValidBookmarks) { auto bookmarks = THIS->getBookmarks(TO_C(onlyValidBookmarks)); jobjectArray retArray = createArray(env, bookmarks.size(), "org/kiwix/libkiwix/Bookmark"); size_t index = 0; + jclass wrapperClass = env->FindClass("org/kiwix/libkiwix/Bookmark"); + jmethodID initMethod = env->GetMethodID(wrapperClass, "", "(J)V"); + for (auto bookmark: bookmarks) { - auto wrapper = BUILD_WRAPPER("org/kiwix/libkiwx/Bookmark", bookmark); + // This double new is necessary as we need to allocate the bookmark itself (as a shared_ptr) on the heap but + // we also want the shared_ptr to be stored in the head as we want to have a ptr (cast as long) to it. + shared_ptr* handle = new shared_ptr(new kiwix::Bookmark(std::move(bookmark))); + jobject wrapper = env->NewObject(wrapperClass, initMethod, reinterpret_cast(handle)); env->SetObjectArrayElement(retArray, index++, wrapper); } return retArray; diff --git a/lib/src/main/cpp/utils.h b/lib/src/main/cpp/utils.h index 00529dd..650ccd2 100644 --- a/lib/src/main/cpp/utils.h +++ b/lib/src/main/cpp/utils.h @@ -25,6 +25,8 @@ #include #include +#include +#include #include #include #include diff --git a/lib/src/main/java/org/kiwix/libkiwix/Bookmark.java b/lib/src/main/java/org/kiwix/libkiwix/Bookmark.java index a6c1d4c..936ab57 100644 --- a/lib/src/main/java/org/kiwix/libkiwix/Bookmark.java +++ b/lib/src/main/java/org/kiwix/libkiwix/Bookmark.java @@ -25,6 +25,10 @@ public Bookmark() { setNativeBookmark(); } + private Bookmark(long handle) { + nativeHandle = handle; + } + public native void setBookId(String bookId); public native void setBookTitle(String bookTitle); public native void setUrl(String url); diff --git a/lib/src/test/CMakeLists.txt b/lib/src/test/CMakeLists.txt index 2c01d42..e5d7ae5 100644 --- a/lib/src/test/CMakeLists.txt +++ b/lib/src/test/CMakeLists.txt @@ -2,38 +2,43 @@ cmake_minimum_required (VERSION 3.16) project (buildkiwix) add_library(buildkiwix -SHARED -${CMAKE_SOURCE_DIR}/../../../../../main/cpp/base64.cpp -${CMAKE_SOURCE_DIR}/../../../../../main/cpp/book.cpp -${CMAKE_SOURCE_DIR}/../../../../../main/cpp/filter.cpp -${CMAKE_SOURCE_DIR}/../../../../../main/cpp/kiwixicu.cpp -${CMAKE_SOURCE_DIR}/../../../../../main/cpp/kiwixreader.cpp -${CMAKE_SOURCE_DIR}/../../../../../main/cpp/kiwixsearcher.cpp -${CMAKE_SOURCE_DIR}/../../../../../main/cpp/kiwixserver.cpp -${CMAKE_SOURCE_DIR}/../../../../../main/cpp/library.cpp -${CMAKE_SOURCE_DIR}/../../../../../main/cpp/manager.cpp -${CMAKE_SOURCE_DIR}/../../../../../main/cpp/utils.h +SHARED +${PROJECT_SOURCE_DIR}/../main/cpp/libkiwix/book.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libkiwix/bookmark.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libkiwix/filter.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libkiwix/illustration.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libkiwix/kiwixicu.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libkiwix/kiwixserver.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libkiwix/library.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libkiwix/manager.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libzim/archive.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libzim/blob.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libzim/entry.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libzim/entry_iterator.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libzim/item.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libzim/query.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libzim/search.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libzim/search_iterator.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libzim/searcher.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libzim/suggestion_item.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libzim/suggestion_iterator.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libzim/suggestion_search.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/libzim/suggestion_searcher.cpp +${PROJECT_SOURCE_DIR}/../main/cpp/utils.h ) find_package(JNI) -if (JNI_FOUND) - message (STATUS "JNI_INCLUDE_DIRS=${JNI_INCLUDE_DIRS}") - message (STATUS "JNI_LIBRARIES=${JNI_LIBRARIES}") -endif() - include_directories( -/opt/hostedtoolcache/jdk/11.0.17/x64/include -/opt/hostedtoolcache/jdk/11.0.17/x64/include/linux -${CMAKE_SOURCE_DIR}/../../../../../main/cpp -${CMAKE_SOURCE_DIR}/../../../../../main/cpp/include/libkiwix -${CMAKE_SOURCE_DIR}/../../../../../main/cpp/include/libzim -${CMAKE_SOURCE_DIR}/../../../../../main/cpp/include/javah_generated -${CMAKE_SOURCE_DIR}/../../../../../main/cpp/include/utils +${JNI_INCLUDE_DIRS} +${PROJECT_SOURCE_DIR}/../main/cpp +${PROJECT_SOURCE_DIR}/../../build/include/libkiwix +${PROJECT_SOURCE_DIR}/../../build/include/libzim +${PROJECT_SOURCE_DIR}/../../build/include/javah_generated ) target_link_libraries(buildkiwix -LINK_PUBLIC -${CMAKE_SOURCE_DIR}/../../../../../../build/libkiwix.so -${CMAKE_SOURCE_DIR}/../../../../../../build/libzim.so +LINK_PUBLIC +${PROJECT_SOURCE_DIR}/../../build/libkiwix.so +${PROJECT_SOURCE_DIR}/../../build/libzim.so ) diff --git a/lib/src/test/compile_and_run_test.sh b/lib/src/test/compile_and_run_test.sh index 267ec70..e4337a2 100755 --- a/lib/src/test/compile_and_run_test.sh +++ b/lib/src/test/compile_and_run_test.sh @@ -14,9 +14,9 @@ cmake . make # Copy generated .so file to build directory to run test cases -cd ../../../../../../../ +cd ../../../ ./gradlew copyBuildKiwixSoFile -cd app/src/androidTests/java/org/kiwix/kiwixlib/ +cd lib/src/test KIWIX_LIB_JAR=$1 if [ -z $KIWIX_LIB_JAR ] @@ -45,5 +45,6 @@ java -Djava.library.path="$KIWIX_LIB_DIR" \ || die "Unit test failed" java -jar jacoco-0.8.7/lib/jacococli.jar report jacoco.exec \ ---classfiles org/kiwix/kiwixlib/ \ ---html ../../../../../../../build/coverage-report --xml coverage.xml \ No newline at end of file +--classfiles org/kiwix/libkiwix/ \ +--classfiles org/kiwix/libzim/ \ +--html ../../build/coverage-report --xml coverage.xml \ No newline at end of file diff --git a/lib/src/test/small_zimfile_data/main.html b/lib/src/test/small_zimfile_data/main.html index c12e573..0a6324a 100644 --- a/lib/src/test/small_zimfile_data/main.html +++ b/lib/src/test/small_zimfile_data/main.html @@ -1,11 +1,11 @@ - + Test ZIM file - + - - Test ZIM file - - + +Test ZIM file + + \ No newline at end of file diff --git a/lib/src/test/test.java b/lib/src/test/test.java index 2997364..e78cb9d 100644 --- a/lib/src/test/test.java +++ b/lib/src/test/test.java @@ -1,8 +1,12 @@ import java.io.*; import java.util.*; + import org.junit.Test; + import static org.junit.Assert.*; -import org.kiwix.kiwixlib.*; + +import org.kiwix.libkiwix.*; +import org.kiwix.libzim.*; public class test { static { @@ -12,20 +16,18 @@ public class test { } private static byte[] getFileContent(String path) - throws IOException - { + throws IOException { File file = new File(path); DataInputStream in = new DataInputStream( new BufferedInputStream( new FileInputStream(file))); - byte[] data = new byte[(int)file.length()]; + byte[] data = new byte[(int) file.length()]; in.read(data); return data; } private static byte[] getFileContentPartial(String path, int offset, int size) - throws IOException - { + throws IOException { File file = new File(path); DataInputStream in = new DataInputStream( new BufferedInputStream( @@ -37,105 +39,103 @@ private static byte[] getFileContentPartial(String path, int offset, int size) } private static String getTextFileContent(String path) - throws IOException - { + throws IOException { return new String(getFileContent(path)); } @Test - public void testReader() - throws JNIKiwixException, IOException - { - JNIKiwixReader reader = new JNIKiwixReader("small.zim"); - assertEquals("Test ZIM file", reader.getTitle()); - assertEquals(3, reader.getFileSize()); // The file size is in KiB - assertEquals("A/main.html", reader.getMainPage()); + public void testArchive() + throws JNIKiwixException, IOException, ZimFileFormatException { + Archive archive = new Archive("small.zim"); + // test the zim file main page title + assertEquals("Test ZIM file", archive.getMainEntry().getTitle()); + // test zim file size + assertEquals(4070, archive.getFilesize()); // The file size is in KiB + // test zim file main url + assertEquals("A/main.html", archive.getMainEntry().getPath()); + // test zim file content String s = getTextFileContent("small_zimfile_data/main.html"); - byte[] c = reader.getContent(new JNIKiwixString("A/main.html"), - new JNIKiwixString(), - new JNIKiwixString(), - new JNIKiwixInt()); - assertEquals(s, new String(c)); + String c = archive.getEntryByPath("A/main.html").getItem(true).getData().getData(); + assertEquals(s, c); + // test zim file icon byte[] faviconData = getFileContent("small_zimfile_data/favicon.png"); - assertEquals(faviconData.length, reader.getArticleSize("I/favicon.png")); - c = reader.getContent(new JNIKiwixString("I/favicon.png"), - new JNIKiwixString(), - new JNIKiwixString(), - new JNIKiwixInt()); - assertTrue(Arrays.equals(faviconData, c)); - - DirectAccessInfo dai = reader.getDirectAccessInformation("I/favicon.png"); + assertEquals(true, archive.hasIllustration(48)); + Item item = archive.getIllustrationItem(48); + assertEquals(faviconData.length, item.getSize()); + + DirectAccessInfo dai = archive.getEntryByPath("I/favicon.png").getItem(true).getDirectAccessInformation(); assertNotEquals("", dai.filename); - c = getFileContentPartial(dai.filename, (int)dai.offset, faviconData.length); - assertTrue(Arrays.equals(faviconData, c)); + c = new String(getFileContentPartial(dai.filename, (int) dai.offset, faviconData.length)); + assertEquals(new String(faviconData), c); + + archive.dispose(); } @Test - public void testReaderByFd() - throws JNIKiwixException, IOException - { + public void testArchiveByFd() + throws JNIKiwixException, IOException, ZimFileFormatException { FileInputStream fis = new FileInputStream("small.zim"); - JNIKiwixReader reader = new JNIKiwixReader(fis.getFD()); - assertEquals("Test ZIM file", reader.getTitle()); - assertEquals(3, reader.getFileSize()); // The file size is in KiB - assertEquals("A/main.html", reader.getMainPage()); + Archive archive = new Archive(fis.getFD()); + // test the zim file main page title + assertEquals("Test ZIM file", archive.getMainEntry().getTitle()); + // test zim file size + assertEquals(4070, archive.getFilesize()); // The file size is in KiB + // test zim file main url + assertEquals("A/main.html", archive.getMainEntry().getPath()); + // test zim file content String s = getTextFileContent("small_zimfile_data/main.html"); - byte[] c = reader.getContent(new JNIKiwixString("A/main.html"), - new JNIKiwixString(), - new JNIKiwixString(), - new JNIKiwixInt()); - assertEquals(s, new String(c)); + String c = archive.getEntryByPath("A/main.html").getItem(true).getData().getData(); + assertEquals(s, c); + // test zim file icon byte[] faviconData = getFileContent("small_zimfile_data/favicon.png"); - assertEquals(faviconData.length, reader.getArticleSize("I/favicon.png")); - c = reader.getContent(new JNIKiwixString("I/favicon.png"), - new JNIKiwixString(), - new JNIKiwixString(), - new JNIKiwixInt()); - assertTrue(Arrays.equals(faviconData, c)); - - DirectAccessInfo dai = reader.getDirectAccessInformation("I/favicon.png"); + assertEquals(true, archive.hasIllustration(48)); + Item item = archive.getIllustrationItem(48); + assertEquals(faviconData.length, item.getSize()); + + DirectAccessInfo dai = archive.getEntryByPath("I/favicon.png").getItem(true).getDirectAccessInformation(); assertNotEquals("", dai.filename); - c = getFileContentPartial(dai.filename, (int)dai.offset, faviconData.length); - assertTrue(Arrays.equals(faviconData, c)); + c = new String(getFileContentPartial(dai.filename, (int) dai.offset, faviconData.length)); + assertEquals(new String(faviconData), c); + + archive.dispose(); } @Test - public void testReaderWithAnEmbeddedArchive() - throws JNIKiwixException, IOException - { + public void testArchiveWithAnEmbeddedArchive() + throws JNIKiwixException, IOException, ZimFileFormatException { File plainArchive = new File("small.zim"); FileInputStream fis = new FileInputStream("small.zim.embedded"); - JNIKiwixReader reader = new JNIKiwixReader(fis.getFD(), 8, plainArchive.length()); - assertEquals("Test ZIM file", reader.getTitle()); - assertEquals(3, reader.getFileSize()); // The file size is in KiB - assertEquals("A/main.html", reader.getMainPage()); + Archive archive = new Archive(fis.getFD(), 8, plainArchive.length()); + // test the zim file main page title + assertEquals("Test ZIM file", archive.getMainEntry().getTitle()); + // test zim file size + assertEquals(4070, archive.getFilesize()); // The file size is in KiB + // test zim file main url + assertEquals("A/main.html", archive.getMainEntry().getPath()); + // test zim file content String s = getTextFileContent("small_zimfile_data/main.html"); - byte[] c = reader.getContent(new JNIKiwixString("A/main.html"), - new JNIKiwixString(), - new JNIKiwixString(), - new JNIKiwixInt()); - assertEquals(s, new String(c)); + String c = archive.getEntryByPath("A/main.html").getItem(true).getData().getData(); + assertEquals(s, c); + // test zim file icon byte[] faviconData = getFileContent("small_zimfile_data/favicon.png"); - assertEquals(faviconData.length, reader.getArticleSize("I/favicon.png")); - c = reader.getContent(new JNIKiwixString("I/favicon.png"), - new JNIKiwixString(), - new JNIKiwixString(), - new JNIKiwixInt()); - assertTrue(Arrays.equals(faviconData, c)); - - DirectAccessInfo dai = reader.getDirectAccessInformation("I/favicon.png"); + assertEquals(true, archive.hasIllustration(48)); + Item item = archive.getIllustrationItem(48); + assertEquals(faviconData.length, item.getSize()); + + DirectAccessInfo dai = archive.getEntryByPath("I/favicon.png").getItem(true).getDirectAccessInformation(); assertNotEquals("", dai.filename); - c = getFileContentPartial(dai.filename, (int)dai.offset, faviconData.length); - assertTrue(Arrays.equals(faviconData, c)); + c = new String(getFileContentPartial(dai.filename, (int) dai.offset, faviconData.length)); + assertEquals(new String(faviconData), c); + + archive.dispose(); } @Test public void testLibrary() - throws IOException - { + throws IOException { Library lib = new Library(); Manager manager = new Manager(lib); String content = getTextFileContent("catalog.xml"); @@ -143,11 +143,53 @@ public void testLibrary() assertEquals(lib.getBookCount(true, true), 1); String[] bookIds = lib.getBooksIds(); assertEquals(bookIds.length, 1); - Book book = lib.getBookById(bookIds[0]); - assertEquals(book.getTitle(), "Test ZIM file"); - assertEquals(book.getTags(), "unit;test"); - assertEquals(book.getFaviconUrl(), "http://localhost/meta?name=favicon&content=small"); - assertEquals(book.getUrl(), "http://localhost/small.zim"); + lib.filter(new Filter().local(true)); + } + + @Test + public void testServer() throws ZimFileFormatException, JNIKiwixException { + Archive archive = new Archive("small.zim"); + Library lib = new Library(); + Book book = new Book(); + book.update(archive); + lib.addBook(book); + assertEquals(1, lib.getBookCount(true, true)); + Server server = new Server(lib); + server.setPort(8080); + assertEquals(true, server.start()); + } + + @Test + public void testBookMark() throws ZimFileFormatException, JNIKiwixException { + Archive archive = new Archive("small.zim"); + Library lib = new Library(); + Book book = new Book(); + book.update(archive); + lib.addBook(book); + Bookmark bookmark = new Bookmark(); + bookmark.setBookId(book.getId()); + bookmark.setTitle(book.getTitle()); + bookmark.setUrl(book.getUrl()); + bookmark.setLanguage(book.getLanguage()); + bookmark.setDate(book.getDate()); + bookmark.setBookTitle(book.getName()); + // add bookmark to library + lib.addBookmark(bookmark); + Bookmark[] bookmarkArray = lib.getBookmarks(true); + assertEquals(1, bookmarkArray.length); + bookmark = bookmarkArray[0]; + // test bookmark title + assertEquals(bookmark.getTitle(), book.getTitle()); + // remove bookmark from library + lib.removeBookmark(bookmark.getBookId(), bookmark.getUrl()); + bookmarkArray = lib.getBookmarks(true); + assertEquals(0, bookmarkArray.length); + } + + @Test + public void testSearcher() throws Exception, ZimFileFormatException, JNIKiwixException { + Archive archive = new Archive("small.zim"); + Searcher searcher = new Searcher(archive); } static