diff --git a/.gear/gpui.spec b/.gear/gpui.spec
index d4dec65..2eea246 100644
--- a/.gear/gpui.spec
+++ b/.gear/gpui.spec
@@ -26,6 +26,7 @@ BuildRequires: libuuid-devel
BuildRequires: glib2-devel
BuildRequires: libpcre-devel
BuildRequires: libkrb5-devel
+BuildRequires: libgtest-devel
BuildRequires: qt5-base-common
BuildRequires: doxygen
diff --git a/Dockerfile b/Dockerfile
index 12e38c2..b3f6f82 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -41,6 +41,7 @@ RUN apt-get update \
libpcre-devel \
libkrb5-devel \
libxerces-c-devel \
+ libgtest-devel \
xsd \
boost-devel-headers \
desktop-file-utils \
diff --git a/tests/auto/CMakeLists.txt b/tests/auto/CMakeLists.txt
index 9ccae3f..fb9eb96 100644
--- a/tests/auto/CMakeLists.txt
+++ b/tests/auto/CMakeLists.txt
@@ -1,3 +1,4 @@
+add_subdirectory(core)
add_subdirectory(gui)
add_subdirectory(io)
add_subdirectory(model)
diff --git a/tests/auto/core/CMakeLists.txt b/tests/auto/core/CMakeLists.txt
new file mode 100644
index 0000000..13eb772
--- /dev/null
+++ b/tests/auto/core/CMakeLists.txt
@@ -0,0 +1,4 @@
+find_package(GPUI COMPONENTS gui core REQUIRED)
+include_directories(${GPUI_INCLUDE_DIRS})
+
+add_subdirectory(translatorstorage)
diff --git a/tests/auto/core/translatorstorage/CMakeLists.txt b/tests/auto/core/translatorstorage/CMakeLists.txt
new file mode 100644
index 0000000..3675431
--- /dev/null
+++ b/tests/auto/core/translatorstorage/CMakeLists.txt
@@ -0,0 +1,28 @@
+find_package(GTest)
+find_package(Qt5 COMPONENTS Core Gui Test LinguistTools REQUIRED)
+
+set(TS_FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/i18n/test_ru.ts
+ ${CMAKE_CURRENT_SOURCE_DIR}/i18n/test_en.ts
+)
+
+add_translation(QM_FILES "${TS_FILES}")
+
+add_translation_resource(RESOURCES_SRC translatorstorage-tests "${QM_FILES}")
+
+qt5_add_resources(LIB_RESOURCES ${RESOURCES_SRC})
+
+add_executable(translatorstorage-test
+ translatorstorage-test.cpp
+
+ translatorstorageshadow.h
+ translatorstorageshadow.cpp
+
+ ${LIB_RESOURCES}
+)
+
+target_link_libraries(translatorstorage-test gpui-core Qt5::Core Qt5::Gui Qt5::Test
+ gtest gtest_main)
+
+
+add_gpui_test(core.translatorstorage-test translatorstorage-test)
diff --git a/tests/auto/core/translatorstorage/i18n/test_en.ts b/tests/auto/core/translatorstorage/i18n/test_en.ts
new file mode 100644
index 0000000..ca33725
--- /dev/null
+++ b/tests/auto/core/translatorstorage/i18n/test_en.ts
@@ -0,0 +1,12 @@
+
+
+
+
+ QObject
+
+
+ test
+ ัะตัั
+
+
+
diff --git a/tests/auto/core/translatorstorage/i18n/test_ru.ts b/tests/auto/core/translatorstorage/i18n/test_ru.ts
new file mode 100644
index 0000000..f205d19
--- /dev/null
+++ b/tests/auto/core/translatorstorage/i18n/test_ru.ts
@@ -0,0 +1,12 @@
+
+
+
+
+ QObject
+
+
+ test
+ test
+
+
+
diff --git a/tests/auto/core/translatorstorage/translatorstorage-test.cpp b/tests/auto/core/translatorstorage/translatorstorage-test.cpp
new file mode 100644
index 0000000..68acbca
--- /dev/null
+++ b/tests/auto/core/translatorstorage/translatorstorage-test.cpp
@@ -0,0 +1,33 @@
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+#include "../../../../src/core/translatorstorage.h"
+#include "translatorstorageshadow.h"
+
+TEST(TranslatorStorage, loadTranslators)
+{
+ QObject::tr("test");
+
+ TranslatorStorage translatorStorage;
+ translatorStorage.loadTranslators("en");
+
+ void *ptr = &translatorStorage;
+ tests::TranslatorStorageShadow *shadowPtr = static_cast(ptr);
+ auto loadedTranslations = shadowPtr->d.get()->translators.size();
+
+ EXPECT_EQ(loadedTranslations, 1);
+}
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ ::testing::InitGoogleTest(&argc, argv);
+
+ return RUN_ALL_TESTS();
+}
diff --git a/tests/auto/core/translatorstorage/translatorstorageshadow.cpp b/tests/auto/core/translatorstorage/translatorstorageshadow.cpp
new file mode 100644
index 0000000..1c189ae
--- /dev/null
+++ b/tests/auto/core/translatorstorage/translatorstorageshadow.cpp
@@ -0,0 +1,13 @@
+#include "translatorstorageshadow.h"
+
+#include
+
+namespace tests
+{
+TranslatorStorageShadow::TranslatorStorageShadow()
+ : d(new TranslatorStorageShadowPrivate)
+{}
+
+TranslatorStorageShadow::~TranslatorStorageShadow() {}
+
+} // namespace tests
diff --git a/tests/auto/core/translatorstorage/translatorstorageshadow.h b/tests/auto/core/translatorstorage/translatorstorageshadow.h
new file mode 100644
index 0000000..35f8eb4
--- /dev/null
+++ b/tests/auto/core/translatorstorage/translatorstorageshadow.h
@@ -0,0 +1,27 @@
+#ifndef GPUI_TRANSLATOR_STORAGE_SHADOW_H
+#define GPUI_TRANSLATOR_STORAGE_SHADOW_H
+
+#include "../../../../src/core/translatorstorage.h"
+
+namespace tests
+{
+class TranslatorStorageShadowPrivate;
+
+class TranslatorStorageShadow
+{
+public:
+ TranslatorStorageShadow();
+ ~TranslatorStorageShadow();
+
+public:
+ std::unique_ptr d;
+};
+
+class TranslatorStorageShadowPrivate
+{
+public:
+ std::vector> translators = {};
+ QString m_errorString = {};
+};
+} // namespace tests
+#endif