Часть коммитов здесь затрагивает только CMake файлы, а самые последние коммиты – это с изменениями в library – скорее иллюстрация, как я предлагаю решить проблему. Перед финальным мёржем эти изменения собираюсь откатить.
Здесь все юнит-тесты из library, которые зависят от library/cpp/testing/gtest, а именно:
189
209
210
Я видел, что в тестах для library/cpp/coroutine/engine/stack эту зависимость поменяли: и теперь те юнит-тесты зависят напрямую от гугл-тест библиотеки, без прослойки library/cpp/testing/gtest. Здесь я предлагаю поступить так же, заменив инклюды #include <library/cpp/testing/gtest/gtest.h> на #include <gtest/gtest.h> и, где необходимо, #include <gmock/gmock.h>. Если неприемлемо, тогда нужно вернуть library/cpp/testing/gtest и library/cpp/testing/gtest_main.
Теперь к другим деталям:
В некоторых тестах добавил недостающие инклюды — это потребовалось после удаления инкдюда хедера из library/cpp/testing/gtest.
В library/cpp/yt/memory пока что закомментировал тест erased_storage_ut, потому что он требует недостающей библиотеки library/cpp/int128. Её нужно либо притащить, либо через макросы убрать часть тестов.
В library/cpp/yt/yson_string пока что закомментировал тест saveload_ut, потому что он требует недостающей библиотеки library/cpp/testing/gtest_extensions. У него только зависимость от макроса EXPECT_THROW_MESSAGE_HAS_SUBSTR. Наверное, лучше притащить эту либу, если не хотим переписывать тесты. Была ещё пара юнит тестов (раз и два), в которых были инклюды хедера из этой либы, но макросы из хедера не использовались, поэтому я эти инклюды убрал.
Падал тест library/cpp/yt/string/unittests/enum_ut.cpp, а именно, TFormatTest::Enum. Там просто тестировалась формат-функция, но в процессе TString присваивался пустой std::initializer_list, всё это попадало в std::string::assign(const char*, size_t), где уже грохалось в попытке разыменовать nullptr. Кажется, что это приколы исключительно libstdc++, потому что, как мне представляется, [nullptr, nullptr) – это вполне себе валидный диапазон, и единственное требование из стандарта к assign, чтобы он принимал валидный диапазон. Так или иначе, в library/cpp/yt/string/format-inl.h я заменил присваивание инишиалайзер листа на пустую строку, чтобы уж точно всё работало.
Часть коммитов здесь затрагивает только CMake файлы, а самые последние коммиты – это с изменениями в
library
– скорее иллюстрация, как я предлагаю решить проблему. Перед финальным мёржем эти изменения собираюсь откатить.Здесь все юнит-тесты из
library
, которые зависят отlibrary/cpp/testing/gtest
, а именно:189
209
210
Я видел, что в тестах для
library/cpp/coroutine/engine/stack
эту зависимость поменяли: и теперь те юнит-тесты зависят напрямую от гугл-тест библиотеки, без прослойкиlibrary/cpp/testing/gtest
. Здесь я предлагаю поступить так же, заменив инклюды#include <library/cpp/testing/gtest/gtest.h>
на#include <gtest/gtest.h>
и, где необходимо,#include <gmock/gmock.h>
. Если неприемлемо, тогда нужно вернутьlibrary/cpp/testing/gtest
иlibrary/cpp/testing/gtest_main
.Теперь к другим деталям:
library/cpp/testing/gtest
.erased_storage_ut
, потому что он требует недостающей библиотекиlibrary/cpp/int128
. Её нужно либо притащить, либо через макросы убрать часть тестов.saveload_ut
, потому что он требует недостающей библиотекиlibrary/cpp/testing/gtest_extensions
. У него только зависимость от макросаEXPECT_THROW_MESSAGE_HAS_SUBSTR
. Наверное, лучше притащить эту либу, если не хотим переписывать тесты. Была ещё пара юнит тестов (раз и два), в которых были инклюды хедера из этой либы, но макросы из хедера не использовались, поэтому я эти инклюды убрал.library/cpp/yt/string/unittests/enum_ut.cpp
, а именно,TFormatTest::Enum
. Там просто тестировалась формат-функция, но в процессеTString
присваивался пустойstd::initializer_list
, всё это попадало вstd::string::assign(const char*, size_t)
, где уже грохалось в попытке разыменоватьnullptr
. Кажется, что это приколы исключительноlibstdc++
, потому что, как мне представляется,[nullptr, nullptr)
– это вполне себе валидный диапазон, и единственное требование из стандарта кassign
, чтобы он принимал валидный диапазон. Так или иначе, в library/cpp/yt/string/format-inl.h я заменил присваивание инишиалайзер листа на пустую строку, чтобы уж точно всё работало.