diff --git a/unittest/Makefile.am b/unittest/Makefile.am index cb49b9ff7..8ece3990b 100644 --- a/unittest/Makefile.am +++ b/unittest/Makefile.am @@ -56,6 +56,7 @@ check_PROGRAMS = \ intsimdmatrix_test \ matrix_test \ osd_test \ + loadlang_test \ tesseracttests @@ -80,6 +81,9 @@ matrix_test_LDADD = $(GTEST_LIBS) $(TESS_LIBS) osd_test_SOURCES = osd_test.cc osd_test_LDADD = $(GTEST_LIBS) $(TESS_LIBS) $(LEPTONICA_LIBS) +loadlang_test_SOURCES = loadlang_test.cc +loadlang_test_LDADD = $(GTEST_LIBS) $(TESS_LIBS) $(LEPTONICA_LIBS) + tesseracttests_SOURCES = ../tests/tesseracttests.cpp tesseracttests_LDADD = $(GTEST_LIBS) $(TESS_LIBS) $(LEPTONICA_LIBS) @@ -89,6 +93,7 @@ apiexample_test_LDADD += -lws2_32 intsimdmatrix_test_LDADD += -lws2_32 matrix_test_LDADD += -lws2_32 osd_test_LDADD += -lws2_32 +loadlang_test_LDADD += -lws2_32 tesseracttests_LDADD += -lws2_32 endif diff --git a/unittest/loadlang_test.cc b/unittest/loadlang_test.cc new file mode 100644 index 000000000..942d1f23f --- /dev/null +++ b/unittest/loadlang_test.cc @@ -0,0 +1,239 @@ +/////////////////////////////////////////////////////////////////////// +// File: loadlang_test.cc +// Description: Test loading of All languages and Scripts for Tesseract. +// Author: Shree Devi Kumar +// +// 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 +// 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. +/////////////////////////////////////////////////////////////////////// + +#include "include_gunit.h" +#include "baseapi.h" +#include + +namespace { + +class QuickTest : public testing::Test { + protected: + virtual void SetUp() { + start_time_ = time(nullptr); + } + virtual void TearDown() { + const time_t end_time = time(nullptr); + EXPECT_TRUE(end_time - start_time_ <=25) << "The test took too long - " << ::testing::PrintToString(end_time - start_time_); + } + time_t start_time_; + }; + + void LangLoader(const char* lang, const char* tessdatadir) { + tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI(); + ASSERT_FALSE(api->Init(tessdatadir, lang)) << "Could not initialize tesseract for $lang."; + api->End(); + } + +// For all languages + + class LoadLanguage : public QuickTest , + public ::testing::WithParamInterface { + }; + + TEST_P(LoadLanguage, afr) {LangLoader("afr" , GetParam());} + TEST_P(LoadLanguage, amh) {LangLoader("amh" , GetParam());} + TEST_P(LoadLanguage, ara) {LangLoader("ara" , GetParam());} + TEST_P(LoadLanguage, asm) {LangLoader("asm" , GetParam());} + TEST_P(LoadLanguage, aze) {LangLoader("aze" , GetParam());} + TEST_P(LoadLanguage, aze_cyrl) {LangLoader("aze_cyrl" , GetParam());} + TEST_P(LoadLanguage, bel) {LangLoader("bel" , GetParam());} + TEST_P(LoadLanguage, ben) {LangLoader("ben" , GetParam());} + TEST_P(LoadLanguage, bod) {LangLoader("bod" , GetParam());} + TEST_P(LoadLanguage, bos) {LangLoader("bos" , GetParam());} + TEST_P(LoadLanguage, bre) {LangLoader("bre" , GetParam());} + TEST_P(LoadLanguage, bul) {LangLoader("bul" , GetParam());} + TEST_P(LoadLanguage, cat) {LangLoader("cat" , GetParam());} + TEST_P(LoadLanguage, ceb) {LangLoader("ceb" , GetParam());} + TEST_P(LoadLanguage, ces) {LangLoader("ces" , GetParam());} + TEST_P(LoadLanguage, chi_sim) {LangLoader("chi_sim" , GetParam());} + TEST_P(LoadLanguage, chi_sim_vert) {LangLoader("chi_sim_vert" , GetParam());} + TEST_P(LoadLanguage, chi_tra) {LangLoader("chi_tra" , GetParam());} + TEST_P(LoadLanguage, chi_tra_vert) {LangLoader("chi_tra_vert" , GetParam());} + TEST_P(LoadLanguage, chr) {LangLoader("chr" , GetParam());} + TEST_P(LoadLanguage, cos) {LangLoader("cos" , GetParam());} + TEST_P(LoadLanguage, cym) {LangLoader("cym" , GetParam());} + TEST_P(LoadLanguage, dan) {LangLoader("dan" , GetParam());} + TEST_P(LoadLanguage, deu) {LangLoader("deu" , GetParam());} + TEST_P(LoadLanguage, div) {LangLoader("div" , GetParam());} + TEST_P(LoadLanguage, dzo) {LangLoader("dzo" , GetParam());} + TEST_P(LoadLanguage, ell) {LangLoader("ell" , GetParam());} + TEST_P(LoadLanguage, eng) {LangLoader("eng" , GetParam());} + TEST_P(LoadLanguage, enm) {LangLoader("enm" , GetParam());} + TEST_P(LoadLanguage, epo) {LangLoader("epo" , GetParam());} + TEST_P(LoadLanguage, est) {LangLoader("est" , GetParam());} + TEST_P(LoadLanguage, eus) {LangLoader("eus" , GetParam());} + TEST_P(LoadLanguage, fao) {LangLoader("fao" , GetParam());} + TEST_P(LoadLanguage, fas) {LangLoader("fas" , GetParam());} + TEST_P(LoadLanguage, fil) {LangLoader("fil" , GetParam());} + TEST_P(LoadLanguage, fin) {LangLoader("fin" , GetParam());} + TEST_P(LoadLanguage, fra) {LangLoader("fra" , GetParam());} + TEST_P(LoadLanguage, frk) {LangLoader("frk" , GetParam());} + TEST_P(LoadLanguage, frm) {LangLoader("frm" , GetParam());} + TEST_P(LoadLanguage, fry) {LangLoader("fry" , GetParam());} + TEST_P(LoadLanguage, gla) {LangLoader("gla" , GetParam());} + TEST_P(LoadLanguage, gle) {LangLoader("gle" , GetParam());} + TEST_P(LoadLanguage, glg) {LangLoader("glg" , GetParam());} + TEST_P(LoadLanguage, grc) {LangLoader("grc" , GetParam());} + TEST_P(LoadLanguage, guj) {LangLoader("guj" , GetParam());} + TEST_P(LoadLanguage, hat) {LangLoader("hat" , GetParam());} + TEST_P(LoadLanguage, heb) {LangLoader("heb" , GetParam());} + TEST_P(LoadLanguage, hin) {LangLoader("hin" , GetParam());} + TEST_P(LoadLanguage, hrv) {LangLoader("hrv" , GetParam());} + TEST_P(LoadLanguage, hun) {LangLoader("hun" , GetParam());} + TEST_P(LoadLanguage, hye) {LangLoader("hye" , GetParam());} + TEST_P(LoadLanguage, iku) {LangLoader("iku" , GetParam());} + TEST_P(LoadLanguage, ind) {LangLoader("ind" , GetParam());} + TEST_P(LoadLanguage, isl) {LangLoader("isl" , GetParam());} + TEST_P(LoadLanguage, ita) {LangLoader("ita" , GetParam());} + TEST_P(LoadLanguage, ita_old) {LangLoader("ita_old" , GetParam());} + TEST_P(LoadLanguage, jav) {LangLoader("jav" , GetParam());} + TEST_P(LoadLanguage, jpn) {LangLoader("jpn" , GetParam());} + TEST_P(LoadLanguage, jpn_vert) {LangLoader("jpn_vert" , GetParam());} + TEST_P(LoadLanguage, kan) {LangLoader("kan" , GetParam());} + TEST_P(LoadLanguage, kat) {LangLoader("kat" , GetParam());} + TEST_P(LoadLanguage, kat_old) {LangLoader("kat_old" , GetParam());} + TEST_P(LoadLanguage, kaz) {LangLoader("kaz" , GetParam());} + TEST_P(LoadLanguage, khm) {LangLoader("khm" , GetParam());} + TEST_P(LoadLanguage, kir) {LangLoader("kir" , GetParam());} +// TEST_P(LoadLanguage, kmr) {LangLoader("kmr" , GetParam());} + TEST_P(LoadLanguage, kor) {LangLoader("kor" , GetParam());} + TEST_P(LoadLanguage, kor_vert) {LangLoader("kor_vert" , GetParam());} + TEST_P(LoadLanguage, lao) {LangLoader("lao" , GetParam());} + TEST_P(LoadLanguage, lat) {LangLoader("lat" , GetParam());} + TEST_P(LoadLanguage, lav) {LangLoader("lav" , GetParam());} + TEST_P(LoadLanguage, lit) {LangLoader("lit" , GetParam());} + TEST_P(LoadLanguage, ltz) {LangLoader("ltz" , GetParam());} + TEST_P(LoadLanguage, mal) {LangLoader("mal" , GetParam());} + TEST_P(LoadLanguage, mar) {LangLoader("mar" , GetParam());} + TEST_P(LoadLanguage, mkd) {LangLoader("mkd" , GetParam());} + TEST_P(LoadLanguage, mlt) {LangLoader("mlt" , GetParam());} + TEST_P(LoadLanguage, mon) {LangLoader("mon" , GetParam());} + TEST_P(LoadLanguage, mri) {LangLoader("mri" , GetParam());} + TEST_P(LoadLanguage, msa) {LangLoader("msa" , GetParam());} + TEST_P(LoadLanguage, mya) {LangLoader("mya" , GetParam());} + TEST_P(LoadLanguage, nep) {LangLoader("nep" , GetParam());} + TEST_P(LoadLanguage, nld) {LangLoader("nld" , GetParam());} + TEST_P(LoadLanguage, nor) {LangLoader("nor" , GetParam());} + TEST_P(LoadLanguage, oci) {LangLoader("oci" , GetParam());} + TEST_P(LoadLanguage, ori) {LangLoader("ori" , GetParam());} + TEST_P(LoadLanguage, osd) {LangLoader("osd" , GetParam());} + TEST_P(LoadLanguage, pan) {LangLoader("pan" , GetParam());} + TEST_P(LoadLanguage, pol) {LangLoader("pol" , GetParam());} + TEST_P(LoadLanguage, por) {LangLoader("por" , GetParam());} + TEST_P(LoadLanguage, pus) {LangLoader("pus" , GetParam());} + TEST_P(LoadLanguage, que) {LangLoader("que" , GetParam());} + TEST_P(LoadLanguage, ron) {LangLoader("ron" , GetParam());} + TEST_P(LoadLanguage, rus) {LangLoader("rus" , GetParam());} + TEST_P(LoadLanguage, san) {LangLoader("san" , GetParam());} + TEST_P(LoadLanguage, sin) {LangLoader("sin" , GetParam());} + TEST_P(LoadLanguage, slk) {LangLoader("slk" , GetParam());} + TEST_P(LoadLanguage, slv) {LangLoader("slv" , GetParam());} + TEST_P(LoadLanguage, snd) {LangLoader("snd" , GetParam());} + TEST_P(LoadLanguage, spa) {LangLoader("spa" , GetParam());} + TEST_P(LoadLanguage, spa_old) {LangLoader("spa_old" , GetParam());} + TEST_P(LoadLanguage, sqi) {LangLoader("sqi" , GetParam());} + TEST_P(LoadLanguage, srp) {LangLoader("srp" , GetParam());} + TEST_P(LoadLanguage, srp_latn) {LangLoader("srp_latn" , GetParam());} + TEST_P(LoadLanguage, sun) {LangLoader("sun" , GetParam());} + TEST_P(LoadLanguage, swa) {LangLoader("swa" , GetParam());} + TEST_P(LoadLanguage, swe) {LangLoader("swe" , GetParam());} + TEST_P(LoadLanguage, syr) {LangLoader("syr" , GetParam());} + TEST_P(LoadLanguage, tam) {LangLoader("tam" , GetParam());} + TEST_P(LoadLanguage, tat) {LangLoader("tat" , GetParam());} + TEST_P(LoadLanguage, tel) {LangLoader("tel" , GetParam());} + TEST_P(LoadLanguage, tgk) {LangLoader("tgk" , GetParam());} + TEST_P(LoadLanguage, tha) {LangLoader("tha" , GetParam());} + TEST_P(LoadLanguage, tir) {LangLoader("tir" , GetParam());} + TEST_P(LoadLanguage, ton) {LangLoader("ton" , GetParam());} + TEST_P(LoadLanguage, tur) {LangLoader("tur" , GetParam());} + TEST_P(LoadLanguage, uig) {LangLoader("uig" , GetParam());} + TEST_P(LoadLanguage, ukr) {LangLoader("ukr" , GetParam());} + TEST_P(LoadLanguage, urd) {LangLoader("urd" , GetParam());} + TEST_P(LoadLanguage, uzb) {LangLoader("uzb" , GetParam());} + TEST_P(LoadLanguage, uzb_cyrl) {LangLoader("uzb_cyrl" , GetParam());} + TEST_P(LoadLanguage, vie) {LangLoader("vie" , GetParam());} + TEST_P(LoadLanguage, yid) {LangLoader("yid" , GetParam());} + TEST_P(LoadLanguage, yor) {LangLoader("yor" , GetParam());} + + INSTANTIATE_TEST_CASE_P( Tessdata_fast, LoadLanguage, + ::testing::Values(TESSDATA_DIR "_fast") ); + INSTANTIATE_TEST_CASE_P( Tessdata_best, LoadLanguage, + ::testing::Values(TESSDATA_DIR "_best") ); + INSTANTIATE_TEST_CASE_P( Tessdata, LoadLanguage, + ::testing::Values(TESSDATA_DIR) ); + +// For all scripts + + class LoadScript : public QuickTest , + public ::testing::WithParamInterface { + }; + + TEST_P(LoadScript, Arabic) {LangLoader("script/Arabic" , GetParam());} + TEST_P(LoadScript, Armenian) {LangLoader("script/Armenian" , GetParam());} + TEST_P(LoadScript, Bengali) {LangLoader("script/Bengali" , GetParam());} + TEST_P(LoadScript, Canadian_Aboriginal) {LangLoader("script/Canadian_Aboriginal" , GetParam());} + TEST_P(LoadScript, Cherokee) {LangLoader("script/Cherokee" , GetParam());} + TEST_P(LoadScript, Cyrillic) {LangLoader("script/Cyrillic" , GetParam());} + TEST_P(LoadScript, Devanagari) {LangLoader("script/Devanagari" , GetParam());} + TEST_P(LoadScript, Ethiopic) {LangLoader("script/Ethiopic" , GetParam());} + TEST_P(LoadScript, Fraktur) {LangLoader("script/Fraktur" , GetParam());} + TEST_P(LoadScript, Georgian) {LangLoader("script/Georgian" , GetParam());} + TEST_P(LoadScript, Greek) {LangLoader("script/Greek" , GetParam());} + TEST_P(LoadScript, Gujarati) {LangLoader("script/Gujarati" , GetParam());} + TEST_P(LoadScript, Gurmukhi) {LangLoader("script/Gurmukhi" , GetParam());} + TEST_P(LoadScript, HanS) {LangLoader("script/HanS" , GetParam());} + TEST_P(LoadScript, HanS_vert) {LangLoader("script/HanS_vert" , GetParam());} + TEST_P(LoadScript, HanT) {LangLoader("script/HanT" , GetParam());} + TEST_P(LoadScript, HanT_vert) {LangLoader("script/HanT_vert" , GetParam());} + TEST_P(LoadScript, Hangul) {LangLoader("script/Hangul" , GetParam());} + TEST_P(LoadScript, Hangul_vert) {LangLoader("script/Hangul_vert" , GetParam());} + TEST_P(LoadScript, Hebrew) {LangLoader("script/Hebrew" , GetParam());} + TEST_P(LoadScript, Japanese) {LangLoader("script/Japanese" , GetParam());} + TEST_P(LoadScript, Japanese_vert) {LangLoader("script/Japanese_vert" , GetParam());} + TEST_P(LoadScript, Kannada) {LangLoader("script/Kannada" , GetParam());} + TEST_P(LoadScript, Khmer) {LangLoader("script/Khmer" , GetParam());} + TEST_P(LoadScript, Lao) {LangLoader("script/Lao" , GetParam());} + TEST_P(LoadScript, Latin) {LangLoader("script/Latin" , GetParam());} + TEST_P(LoadScript, Malayalam) {LangLoader("script/Malayalam" , GetParam());} + TEST_P(LoadScript, Myanmar) {LangLoader("script/Myanmar" , GetParam());} + TEST_P(LoadScript, Oriya) {LangLoader("script/Oriya" , GetParam());} + TEST_P(LoadScript, Sinhala) {LangLoader("script/Sinhala" , GetParam());} + TEST_P(LoadScript, Syriac) {LangLoader("script/Syriac" , GetParam());} + TEST_P(LoadScript, Tamil) {LangLoader("script/Tamil" , GetParam());} + TEST_P(LoadScript, Telugu) {LangLoader("script/Telugu" , GetParam());} + TEST_P(LoadScript, Thaana) {LangLoader("script/Thaana" , GetParam());} + TEST_P(LoadScript, Thai) {LangLoader("script/Thai" , GetParam());} + TEST_P(LoadScript, Tibetan) {LangLoader("script/Tibetan" , GetParam());} + TEST_P(LoadScript, Vietnamese) {LangLoader("script/Vietnamese" , GetParam());} + + INSTANTIATE_TEST_CASE_P( Tessdata_fast, LoadScript, + ::testing::Values(TESSDATA_DIR "_fast") ); + INSTANTIATE_TEST_CASE_P( Tessdata_best, LoadScript, + ::testing::Values(TESSDATA_DIR "_best") ); + INSTANTIATE_TEST_CASE_P( Tessdata, LoadScript, + ::testing::Values(TESSDATA_DIR) ); + +// Use class LoadLang for languages which are NOT there in all three repos + + class LoadLang : public QuickTest { + }; + + TEST_F(LoadLang, kmrFast) {LangLoader("kmr" , TESSDATA_DIR "_fast");} + TEST_F(LoadLang, kmrBest) {LangLoader("kmr" , TESSDATA_DIR "_best");} +// TEST_F(LoadLang, kmrBestInt) {LangLoader("kmr" , TESSDATA_DIR);} + +} // namespace