mirror of
https://github.com/transmission/transmission.git
synced 2025-12-24 20:35:36 +00:00
refactor: add tr_variant::unmanaged_string(tr_quark) (#7906)
* feat: add tr_variant::unmanaged_string(tr_quark) * refactor: use tr_variant::unmanaged_string(tr_quark)
This commit is contained in:
@@ -99,7 +99,7 @@ TEST_F(RpcTest, JsonRpcWrongVersion)
|
||||
{
|
||||
auto request_map = tr_variant::Map{ 3U };
|
||||
request_map.try_emplace(TR_KEY_jsonrpc, "1.0");
|
||||
request_map.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(tr_quark_get_string_view(TR_KEY_session_stats)));
|
||||
request_map.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(TR_KEY_session_stats));
|
||||
request_map.try_emplace(TR_KEY_id, 12345);
|
||||
|
||||
auto response = tr_variant{};
|
||||
@@ -141,9 +141,7 @@ TEST_F(RpcTest, idSync)
|
||||
{
|
||||
auto request_map = tr_variant::Map{ 3U };
|
||||
request_map.try_emplace(TR_KEY_jsonrpc, JsonRpc::Version);
|
||||
request_map.try_emplace(
|
||||
TR_KEY_method,
|
||||
tr_variant::unmanaged_string(tr_quark_get_string_view(TR_KEY_session_stats_kebab)));
|
||||
request_map.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(TR_KEY_session_stats_kebab));
|
||||
request_map[TR_KEY_id].merge(request_id); // copy
|
||||
|
||||
auto response = tr_variant{};
|
||||
@@ -189,7 +187,7 @@ TEST_F(RpcTest, idWrongType)
|
||||
{
|
||||
auto request_map = tr_variant::Map{ 3U };
|
||||
request_map.try_emplace(TR_KEY_jsonrpc, JsonRpc::Version);
|
||||
request_map.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(tr_quark_get_string_view(TR_KEY_session_stats)));
|
||||
request_map.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(TR_KEY_session_stats));
|
||||
request_map[TR_KEY_id].merge(request_id); // copy
|
||||
|
||||
auto response = tr_variant{};
|
||||
@@ -223,7 +221,7 @@ TEST_F(RpcTest, idWrongType)
|
||||
TEST_F(RpcTest, tagSyncLegacy)
|
||||
{
|
||||
auto request_map = tr_variant::Map{ 2U };
|
||||
request_map.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(tr_quark_get_string_view(TR_KEY_session_stats)));
|
||||
request_map.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(TR_KEY_session_stats));
|
||||
request_map.try_emplace(TR_KEY_tag, 12345);
|
||||
|
||||
auto response = tr_variant{};
|
||||
@@ -257,9 +255,7 @@ TEST_F(RpcTest, idAsync)
|
||||
|
||||
auto request_map = tr_variant::Map{ 3U };
|
||||
request_map.try_emplace(TR_KEY_jsonrpc, JsonRpc::Version);
|
||||
request_map.try_emplace(
|
||||
TR_KEY_method,
|
||||
tr_variant::unmanaged_string(tr_quark_get_string_view(TR_KEY_torrent_rename_path_kebab)));
|
||||
request_map.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(TR_KEY_torrent_rename_path_kebab));
|
||||
request_map[TR_KEY_id].merge(request_id); // copy
|
||||
|
||||
auto params_map = tr_variant::Map{ 2U };
|
||||
@@ -310,7 +306,7 @@ TEST_F(RpcTest, tagAsyncLegacy)
|
||||
EXPECT_NE(nullptr, tor);
|
||||
|
||||
auto request_map = tr_variant::Map{ 3U };
|
||||
request_map.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(tr_quark_get_string_view(TR_KEY_torrent_rename_path)));
|
||||
request_map.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(TR_KEY_torrent_rename_path));
|
||||
request_map.try_emplace(TR_KEY_tag, 12345);
|
||||
|
||||
auto arguments_map = tr_variant::Map{ 2U };
|
||||
@@ -343,7 +339,7 @@ TEST_F(RpcTest, NotificationSync)
|
||||
{
|
||||
auto request_map = tr_variant::Map{ 2U };
|
||||
request_map.try_emplace(TR_KEY_jsonrpc, JsonRpc::Version);
|
||||
request_map.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(tr_quark_get_string_view(TR_KEY_session_stats)));
|
||||
request_map.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(TR_KEY_session_stats));
|
||||
|
||||
auto response = tr_variant{};
|
||||
tr_rpc_request_exec(
|
||||
@@ -361,7 +357,7 @@ TEST_F(RpcTest, NotificationAsync)
|
||||
|
||||
auto request_map = tr_variant::Map{ 2U };
|
||||
request_map.try_emplace(TR_KEY_jsonrpc, JsonRpc::Version);
|
||||
request_map.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(tr_quark_get_string_view(TR_KEY_torrent_rename_path)));
|
||||
request_map.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(TR_KEY_torrent_rename_path));
|
||||
|
||||
auto params_map = tr_variant::Map{ 2U };
|
||||
params_map.try_emplace(TR_KEY_path, "files-filled-with-zeroes/512");
|
||||
@@ -444,18 +440,18 @@ TEST_F(RpcTest, batch)
|
||||
|
||||
auto request = tr_variant::Map{ 3U };
|
||||
request.try_emplace(TR_KEY_jsonrpc, JsonRpc::Version);
|
||||
request.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(tr_quark_get_string_view(TR_KEY_session_stats_kebab)));
|
||||
request.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(TR_KEY_session_stats_kebab));
|
||||
request.try_emplace(TR_KEY_id, 12345);
|
||||
request_vec.emplace_back(std::move(request));
|
||||
|
||||
request = tr_variant::Map{ 2U };
|
||||
request.try_emplace(TR_KEY_jsonrpc, JsonRpc::Version);
|
||||
request.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(tr_quark_get_string_view(TR_KEY_session_set_kebab)));
|
||||
request.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(TR_KEY_session_set_kebab));
|
||||
request_vec.emplace_back(std::move(request));
|
||||
|
||||
request = tr_variant::Map{ 3U };
|
||||
request.try_emplace(TR_KEY_jsonrpc, JsonRpc::Version);
|
||||
request.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(tr_quark_get_string_view(TR_KEY_session_stats_kebab)));
|
||||
request.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(TR_KEY_session_stats_kebab));
|
||||
request.try_emplace(TR_KEY_id, "12345"sv);
|
||||
request_vec.emplace_back(std::move(request));
|
||||
|
||||
@@ -477,7 +473,7 @@ TEST_F(RpcTest, batch)
|
||||
request_vec.emplace_back(std::move(request));
|
||||
|
||||
request = tr_variant::Map{ 2U };
|
||||
request.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(tr_quark_get_string_view(TR_KEY_session_stats_kebab)));
|
||||
request.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(TR_KEY_session_stats_kebab));
|
||||
request.try_emplace(TR_KEY_tag, 12345);
|
||||
request_vec.emplace_back(std::move(request));
|
||||
|
||||
@@ -596,7 +592,7 @@ TEST_F(RpcTest, sessionGet)
|
||||
|
||||
auto request_map = tr_variant::Map{ 3U };
|
||||
request_map.try_emplace(TR_KEY_jsonrpc, JsonRpc::Version);
|
||||
request_map.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(tr_quark_get_string_view(TR_KEY_session_get)));
|
||||
request_map.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(TR_KEY_session_get));
|
||||
request_map.try_emplace(TR_KEY_id, 12345);
|
||||
auto response = tr_variant{};
|
||||
tr_rpc_request_exec(
|
||||
@@ -768,7 +764,7 @@ TEST_F(RpcTest, torrentGet)
|
||||
auto request = tr_variant::Map{ 3U };
|
||||
|
||||
request.try_emplace(TR_KEY_jsonrpc, JsonRpc::Version);
|
||||
request.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(tr_quark_get_string_view(TR_KEY_torrent_get)));
|
||||
request.try_emplace(TR_KEY_method, tr_variant::unmanaged_string(TR_KEY_torrent_get));
|
||||
request.try_emplace(TR_KEY_id, 12345);
|
||||
|
||||
auto params = tr_variant::Map{ 1U };
|
||||
|
||||
@@ -24,7 +24,11 @@
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
using VariantTest = ::testing::Test;
|
||||
class VariantTest : public ::testing::Test
|
||||
{
|
||||
protected:
|
||||
static void expectVariantMatchesQuark(tr_quark key);
|
||||
};
|
||||
|
||||
#ifndef _WIN32
|
||||
#define STACK_SMASH_DEPTH (1 * 1000 * 1000)
|
||||
@@ -82,6 +86,35 @@ TEST_F(VariantTest, getType)
|
||||
EXPECT_EQ(strkey, *sv);
|
||||
}
|
||||
|
||||
// static
|
||||
void VariantTest::expectVariantMatchesQuark(tr_quark const key)
|
||||
{
|
||||
auto const key_sv = tr_quark_get_string_view(key);
|
||||
|
||||
auto const var = tr_variant::unmanaged_string(key);
|
||||
auto const var_sv = var.value_if<std::string_view>();
|
||||
ASSERT_TRUE(var_sv);
|
||||
|
||||
// The strings should not just be equal,
|
||||
// but should point to literally the same memory
|
||||
EXPECT_EQ(key_sv, *var_sv);
|
||||
EXPECT_EQ(std::data(key_sv), std::data(*var_sv));
|
||||
}
|
||||
|
||||
TEST_F(VariantTest, unmanagedStringFromPredefinedQuark)
|
||||
{
|
||||
expectVariantMatchesQuark(TR_KEY_name);
|
||||
}
|
||||
|
||||
TEST_F(VariantTest, unmanagedStringFromNewQuark)
|
||||
{
|
||||
static auto constexpr NewString = std::string_view{ "this-string-is-not-already-interned" };
|
||||
ASSERT_FALSE(tr_quark_lookup(NewString));
|
||||
|
||||
auto const key = tr_quark_new(NewString);
|
||||
expectVariantMatchesQuark(key);
|
||||
}
|
||||
|
||||
TEST_F(VariantTest, parseInt)
|
||||
{
|
||||
static auto constexpr Benc = "i64e"sv;
|
||||
|
||||
Reference in New Issue
Block a user