From adcfcee89317a5c2742f2825bce4e9fb34739581 Mon Sep 17 00:00:00 2001
From: Andrei Karas <akaras@inbox.ru>
Date: Sat, 2 Jan 2016 21:33:57 +0300
Subject: Add unit tests for po parser.

---
 src/Makefile.am                            |  1 +
 src/utils/translation/podict.h             |  2 +
 src/utils/translation/poparser_unittest.cc | 79 ++++++++++++++++++++++++++++++
 3 files changed, 82 insertions(+)
 create mode 100644 src/utils/translation/poparser_unittest.cc

(limited to 'src')

diff --git a/src/Makefile.am b/src/Makefile.am
index d2ce140a5..183e7730c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1694,6 +1694,7 @@ manaplustests_SOURCES = ${manaplus_SOURCES} \
 	      utils/mathutils_unittest.cc \
 	      utils/stringutils_unittest.cc \
 	      utils/xmlutils_unittest.cc \
+	      utils/translation/poparser_unittest.cc \
 	      resources/dye/dye_unittest.cc \
 	      resources/mstack_unittest.cc
 endif
diff --git a/src/utils/translation/podict.h b/src/utils/translation/podict.h
index dfb0f39ab..4153835bd 100644
--- a/src/utils/translation/podict.h
+++ b/src/utils/translation/podict.h
@@ -41,7 +41,9 @@ class PoDict final
 
         const char *getChar(const char *const str);
 
+#ifndef UNITTESTS
     protected:
+#endif
         friend class PoParser;
 
         PoMap *getMap()
diff --git a/src/utils/translation/poparser_unittest.cc b/src/utils/translation/poparser_unittest.cc
new file mode 100644
index 000000000..11ad6d575
--- /dev/null
+++ b/src/utils/translation/poparser_unittest.cc
@@ -0,0 +1,79 @@
+/*
+ *  The ManaPlus Client
+ *  Copyright (C) 2016  The ManaPlus Developers
+ *
+ *  This file is part of The ManaPlus Client.
+ *
+ *  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 2 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "catch.hpp"
+#include "client.h"
+#include "logger.h"
+
+#include "utils/translation/podict.h"
+#include "utils/translation/poparser.h"
+
+#include "resources/resourcemanager.h"
+
+#include "utils/physfstools.h"
+
+#include "debug.h"
+
+TEST_CASE("PoParser tests", "PoParser")
+{
+    client = new Client;
+    PHYSFS_init("manaplus");
+    dirSeparator = "/";
+    logger = new Logger();
+    ResourceManager::init();
+    resourceManager->addToSearchPath("data", Append_false);
+    resourceManager->addToSearchPath("../data", Append_false);
+
+    SECTION("PoParser empty")
+    {
+        PoParser *parser = new PoParser;
+        PoDict *dict = parser->load("ru",
+            "unknownfilename.po",
+            nullptr);
+
+        REQUIRE(dict != nullptr);
+        REQUIRE(dict->getMap() != nullptr);
+        REQUIRE(dict->getMap()->size() == 0);
+
+        delete parser;
+        delete dict;
+    }
+
+    SECTION("PoParser normal")
+    {
+        PoParser *parser = new PoParser;
+        PoDict *dict = parser->load("ru",
+            "test/test1",
+            nullptr);
+
+        REQUIRE(dict != nullptr);
+        REQUIRE(dict->getMap() != nullptr);
+        REQUIRE(dict->getMap()->size() == 1787);
+        REQUIRE(dict->getStr("Unknown skill message.") ==
+            "Неизвестная ошибка скилов.");
+        REQUIRE(dict->getStr("Full strip failed because of coating.") ==
+            "Full strip failed because of coating.");
+        REQUIRE(dict->getStr("You picked up %d [@@%d|%s@@].") ==
+            "Вы подняли %d [@@%d|%s@@].");
+
+        delete parser;
+        delete dict;
+    }
+}
-- 
cgit v1.2.3-70-g09d2