Merge pull request #34 from kiwix/search_testing

This commit is contained in:
Matthieu Gautier 2023-06-28 15:25:23 +02:00 committed by GitHub
commit 8c3a358486
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 325 additions and 25 deletions

View File

@ -2,8 +2,9 @@ name: Pull requests
on: on:
pull_request: pull_request:
push:
branches: branches:
- '**' - main
jobs: jobs:

View File

@ -37,7 +37,7 @@ DISPOSE
METHOD(jobject, getResults, jint start, jint maxResults) { METHOD(jobject, getResults, jint start, jint maxResults) {
auto results = THIS->getResults(TO_C(start), TO_C(maxResults)); auto results = THIS->getResults(TO_C(start), TO_C(maxResults));
auto obj = NEW_OBJECT("ork/kiwix/libzim/SearchIterator"); auto obj = NEW_OBJECT("org/kiwix/libzim/SearchIterator");
SET_HANDLE(zim::SearchIterator, obj, results.begin()); SET_HANDLE(zim::SearchIterator, obj, results.begin());
// We have to set the nativeHandleEnd but no macro ease our work here. // We have to set the nativeHandleEnd but no macro ease our work here.

View File

@ -64,8 +64,8 @@ METHOD0(jboolean, hasNext) {
} }
METHOD0(jobject, next) { METHOD0(jobject, next) {
(*THIS)++;
zim::Entry entry = **THIS; zim::Entry entry = **THIS;
(*THIS)++;
return BUILD_WRAPPER("org/kiwix/libzim/Entry", entry); return BUILD_WRAPPER("org/kiwix/libzim/Entry", entry);
} }

View File

@ -49,8 +49,8 @@ METHOD0(jboolean, hasNext) {
} }
METHOD0(jobject, next) { METHOD0(jobject, next) {
(*THIS)++;
zim::SuggestionItem item = **THIS; zim::SuggestionItem item = **THIS;
(*THIS)++;
return BUILD_WRAPPER("org/kiwix/libzim/SuggestionItem", item); return BUILD_WRAPPER("org/kiwix/libzim/SuggestionItem", item);
} }

View File

@ -37,7 +37,7 @@ DISPOSE
METHOD(jobject, getResults, jint start, jint maxResults) { METHOD(jobject, getResults, jint start, jint maxResults) {
auto results = THIS->getResults(TO_C(start), TO_C(maxResults)); auto results = THIS->getResults(TO_C(start), TO_C(maxResults));
auto obj = NEW_OBJECT("ork/kiwix/libzim/SuggestionIterator"); auto obj = NEW_OBJECT("org/kiwix/libzim/SuggestionIterator");
SET_HANDLE(zim::SuggestionIterator, obj, results.begin()); SET_HANDLE(zim::SuggestionIterator, obj, results.begin());
// We have to set the nativeHandleEnd but no macro ease our work here. // We have to set the nativeHandleEnd but no macro ease our work here.

View File

@ -8,12 +8,13 @@ die()
cd "$(dirname "$0")" cd "$(dirname "$0")"
rm -f small.zim rm -f small.zim
zimwriterfs --withoutFTIndex \ zimwriterfs -w main.html \
-w main.html \ -n "Test" \
-f favicon.png \ -I favicon.png \
-l en \ -l eng \
-t "Test ZIM file" \ -t "Test ZIM file" \
-d "N/A" \ -d "N/A" \
-L "Test File" \
-c "N/A" \ -c "N/A" \
-p "N/A" \ -p "N/A" \
small_zimfile_data \ small_zimfile_data \

View File

@ -0,0 +1,42 @@
/*
* Copyright (C) 2022 Matthieu Gautier <mgautier@kymeria.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.kiwix.test.libzim;
import org.kiwix.libzim.Query;
public class TestQuery
{
private Query inner;
public Query inner() { return inner; }
public TestQuery(String query) {
inner = new Query(query);
}
public TestQuery setQuery(String query) {
inner.setQuery(query);
return this;
}
public TestQuery setGeorange(float latitude, float longitute, float distance) {
inner.setGeorange(latitude, latitude, distance);
return this;
}
}

View File

@ -0,0 +1,31 @@
/*
* Copyright (C) 2022 Matthieu Gautier <mgautier@kymeria.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.kiwix.test.libzim;
import org.kiwix.libzim.Search;
import org.kiwix.libzim.SearchIterator;
public class TestSearch
{
private Search inner;
public TestSearch(Search _inner) { inner = _inner; }
public TestSearchIterator getResults(int start, int maxResults) { return new TestSearchIterator(inner.getResults(start, maxResults)); }
public long getEstimatedMatches() { return inner.getEstimatedMatches(); }
}

View File

@ -0,0 +1,40 @@
/*
* Copyright (C) 2022 Matthieu Gautier <mgautier@kymeria.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.kiwix.test.libzim;
import org.kiwix.libzim.SearchIterator;
import java.util.Iterator;
public class TestSearchIterator implements Iterator<TestEntry>
{
private SearchIterator inner;
public TestSearchIterator(SearchIterator _inner) { inner = _inner; }
public String getPath() { return inner.getPath(); }
public String getTitle() { return inner.getTitle(); }
public int getScore() { return inner.getScore(); }
public String getSnippet() { return inner.getSnippet(); }
public int getWordCount() { return inner.getWordCount(); }
public int getFileIndex() { return inner.getFileIndex(); }
public int getSize() { return inner.getSize(); }
public String getZimId() { return inner.getZimId(); }
public boolean hasNext() { return inner.hasNext(); }
public TestEntry next() { return new TestEntry(inner.next()); }
}

View File

@ -0,0 +1,50 @@
/*
* Copyright (C) 2022 Matthieu Gautier <mgautier@kymeria.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.kiwix.test.libzim;
import org.kiwix.libzim.Archive;
import org.kiwix.libzim.Searcher;
import org.kiwix.libzim.Search;
import java.util.stream.Stream;
public class TestSearcher
{
private Searcher inner;
public TestSearcher(TestArchive archive) throws Exception
{
inner = new Searcher(archive.inner());
}
public TestSearcher(TestArchive[] archives) throws Exception
{
inner = new Searcher(
Stream.of(archives).map(a -> a.inner()).toArray(Archive[]::new)
);
}
public TestSearcher addArchive(TestArchive archive) {
inner.addArchive(archive.inner());
return this;
}
public TestSearch search(TestQuery query) { return new TestSearch(inner.search(query.inner())); }
public void setVerbose(boolean verbose) { inner.setVerbose(verbose); }
public void dispose() { inner.dispose(); }
}

View File

@ -0,0 +1,32 @@
/*
* Copyright (C) 2022 Matthieu Gautier <mgautier@kymeria.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.kiwix.test.libzim;
import org.kiwix.libzim.SuggestionItem;
public class TestSuggestionItem
{
private SuggestionItem inner;
public TestSuggestionItem(SuggestionItem _inner) { inner = _inner; }
public String getTitle() { return inner.getTitle(); }
public String getPath() { return inner.getPath(); }
public String getSnippet() { return inner.getSnippet(); }
public boolean hasSnippet() { return inner.hasSnippet(); }
}

View File

@ -0,0 +1,31 @@
/*
* Copyright (C) 2022 Matthieu Gautier <mgautier@kymeria.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.kiwix.test.libzim;
import org.kiwix.libzim.SuggestionIterator;
import java.util.Iterator;
public class TestSuggestionIterator implements Iterator<TestSuggestionItem>
{
private SuggestionIterator inner;
public TestSuggestionIterator(SuggestionIterator _inner) { inner = _inner; }
public boolean hasNext() { return inner.hasNext(); }
public TestSuggestionItem next() { return new TestSuggestionItem(inner.next()); }
}

View File

@ -0,0 +1,31 @@
/*
* Copyright (C) 2022 Matthieu Gautier <mgautier@kymeria.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.kiwix.test.libzim;
import org.kiwix.libzim.SuggestionSearch;
public class TestSuggestionSearch
{
private SuggestionSearch inner;
public TestSuggestionSearch(SuggestionSearch _inner) { inner = _inner; }
public TestSuggestionIterator getResults(int start, int maxResults) { return new TestSuggestionIterator(inner.getResults(start, maxResults)); }
public long getEstimatedMatches() { return inner.getEstimatedMatches(); }
}

View File

@ -0,0 +1,37 @@
/*
* Copyright (C) 2022 Matthieu Gautier <mgautier@kymeria.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.kiwix.test.libzim;
import org.kiwix.libzim.SuggestionSearcher;
import java.io.FileDescriptor;
public class TestSuggestionSearcher
{
private SuggestionSearcher inner;
public TestSuggestionSearcher(TestArchive archive) throws Exception
{
inner = new SuggestionSearcher(archive.inner());
}
public TestSuggestionSearch suggest(String query) { return new TestSuggestionSearch(inner.suggest(query)); }
public void setVerbose(boolean verbose) { inner.setVerbose(verbose); }
public void dispose() { inner.dispose(); }
}

Binary file not shown.

Binary file not shown.

View File

@ -49,14 +49,18 @@ public class test {
private void testArchive(TestArchive archive) private void testArchive(TestArchive archive)
throws IOException { throws IOException {
// test the zim file main page title // test the zim file main page title
assertEquals("Test ZIM file", archive.getMainEntry().getTitle()); TestEntry mainPage = archive.getMainEntry();
// test zim file size assertEquals("mainPage", mainPage.getTitle());
assertEquals(4070, archive.getFilesize()); // The file size is in KiB assertEquals("Test ZIM file", mainPage.getItem(true).getTitle());
// test zim file main url // test zim file main url
assertEquals("A/main.html", archive.getMainEntry().getPath()); assertEquals("mainPage", mainPage.getPath());
assertEquals("main.html", mainPage.getItem(true).getPath());
// test zim file size
assertEquals(66910, archive.getFilesize()); // The file size is in KiB
// test zim file content // test zim file content
byte[] mainData = getFileContent("small_zimfile_data/main.html"); byte[] mainData = getFileContent("small_zimfile_data/main.html");
byte[] inZimMainData = archive.getEntryByPath("A/main.html").getItem(true).getData().getData(); byte[] inZimMainData = archive.getEntryByPath("main.html").getItem(true).getData().getData();
assert(Arrays.equals(mainData, inZimMainData)); assert(Arrays.equals(mainData, inZimMainData));
// test zim file icon // test zim file icon
@ -177,30 +181,30 @@ public class test {
bookmarkArray = lib.getBookmarks(true); bookmarkArray = lib.getBookmarks(true);
assertEquals(0, bookmarkArray.length); assertEquals(0, bookmarkArray.length);
} }
/*
@Test @Test
public void testSearcher() throws Exception, ZimFileFormatException, JNIKiwixException { public void testSearcher() throws Exception, ZimFileFormatException, JNIKiwixException {
Archive archive = new Archive("small.zim"); TestArchive archive = new TestArchive("small.zim");
Searcher searcher = new Searcher(archive); TestSearcher searcher = new TestSearcher(archive);
Query query = new Query("test"); TestQuery query = new TestQuery("test");
Search search = searcher.search(query); TestSearch search = searcher.search(query);
int estimatedMatches = (int) search.getEstimatedMatches(); int estimatedMatches = (int) search.getEstimatedMatches();
assertEquals(1, estimatedMatches); assertEquals(1, estimatedMatches);
SearchIterator iterator = search.getResults(0, estimatedMatches); TestSearchIterator iterator = search.getResults(0, estimatedMatches);
assertEquals("Test ZIM file", iterator.getTitle()); assertEquals("Test ZIM file", iterator.getTitle());
searcher.dispose(); searcher.dispose();
SuggestionSearcher suggestionSearcher = new SuggestionSearcher(archive); TestSuggestionSearcher suggestionSearcher = new TestSuggestionSearcher(archive);
SuggestionSearch suggestionSearch = suggestionSearcher.suggest("test"); TestSuggestionSearch suggestionSearch = suggestionSearcher.suggest("test");
int matches = (int) suggestionSearch.getEstimatedMatches(); int matches = (int) suggestionSearch.getEstimatedMatches();
assertEquals(1, matches); assertEquals(1, matches);
SuggestionIterator results = suggestionSearch.getResults(1, matches); TestSuggestionIterator results = suggestionSearch.getResults(0, matches);
SuggestionItem suggestionItem = results.next(); TestSuggestionItem suggestionItem = results.next();
assertEquals("Test ZIM file", suggestionItem.getTitle()); assertEquals("Test ZIM file", suggestionItem.getTitle());
suggestionSearcher.dispose(); suggestionSearcher.dispose();
} }
*/
static static
public void main(String[] args) { public void main(String[] args) {
Library lib = new Library(); Library lib = new Library();