1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-07-07 18:31:49 +02:00

C api: nix_export_std_string -> nix_observe_string

This commit is contained in:
José Luis Lafuente 2024-03-27 17:50:36 +01:00
parent 940ff6535c
commit d96b52bd8b
No known key found for this signature in database
GPG key ID: 8A3455EBE455489A
8 changed files with 92 additions and 76 deletions

View file

@ -7,6 +7,11 @@
namespace nixC {
void observe_string_cb(const char * start, unsigned int n, std::string * user_data)
{
*user_data = std::string(start);
}
std::string PATH_SUFFIX = "/g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-name";
TEST_F(nix_api_util_context, nix_libstore_init)
@ -17,10 +22,10 @@ TEST_F(nix_api_util_context, nix_libstore_init)
TEST_F(nix_api_store_test, nix_store_get_uri)
{
char value[256];
auto ret = nix_store_get_uri(ctx, store, value, 256);
std::string str;
auto ret = nix_store_get_uri(ctx, store, (void *) observe_string_cb, &str);
ASSERT_EQ(NIX_OK, ret);
ASSERT_STREQ("local", value);
ASSERT_STREQ("local", str.c_str());
}
TEST_F(nix_api_store_test, InvalidPathFails)
@ -50,10 +55,10 @@ TEST_F(nix_api_store_test, DoesNotCrashWhenContextIsNull)
TEST_F(nix_api_store_test, get_version)
{
char value[256];
auto ret = nix_store_get_version(ctx, store, value, 256);
std::string str;
auto ret = nix_store_get_version(ctx, store, (void *) observe_string_cb, &str);
ASSERT_EQ(NIX_OK, ret);
ASSERT_STREQ(PACKAGE_VERSION, value);
ASSERT_STREQ(PACKAGE_VERSION, str.c_str());
}
TEST_F(nix_api_util_context, nix_store_open_dummy)
@ -63,9 +68,9 @@ TEST_F(nix_api_util_context, nix_store_open_dummy)
ASSERT_EQ(NIX_OK, ctx->last_err_code);
ASSERT_STREQ("dummy", store->ptr->getUri().c_str());
char value[256];
nix_store_get_version(ctx, store, value, 256);
ASSERT_STREQ("", value);
std::string str;
nix_store_get_version(ctx, store, (void *) observe_string_cb, &str);
ASSERT_STREQ("", str.c_str());
nix_store_free(store);
}

View file

@ -5,6 +5,7 @@
#include <gtest/gtest.h>
namespace nixC {
class nix_api_util_context : public ::testing::Test
{
protected:

View file

@ -9,6 +9,11 @@
namespace nixC {
void observe_string_cb(const char * start, unsigned int n, std::string * user_data)
{
*user_data = std::string(start);
}
TEST_F(nix_api_util_context, nix_context_error)
{
std::string err_msg_ref;
@ -57,13 +62,13 @@ static nix::GlobalConfig::Register rs(&mySettings);
TEST_F(nix_api_util_context, nix_setting_get)
{
ASSERT_EQ(ctx->last_err_code, NIX_OK);
char value[256];
nix_err result = nix_setting_get(ctx, "invalid-key", value, 256);
std::string setting_value;
nix_err result = nix_setting_get(ctx, "invalid-key", (void *) observe_string_cb, &setting_value);
ASSERT_EQ(result, NIX_ERR_KEY);
result = nix_setting_get(ctx, "setting-name", value, 256);
result = nix_setting_get(ctx, "setting-name", (void *) observe_string_cb, &setting_value);
ASSERT_EQ(result, NIX_OK);
ASSERT_STREQ("empty", value);
ASSERT_STREQ("empty", setting_value.c_str());
}
TEST_F(nix_api_util_context, nix_setting_set)
@ -74,10 +79,10 @@ TEST_F(nix_api_util_context, nix_setting_set)
result = nix_setting_set(ctx, "setting-name", "new-value");
ASSERT_EQ(result, NIX_OK);
char value[256];
result = nix_setting_get(ctx, "setting-name", value, 256);
std::string setting_value;
result = nix_setting_get(ctx, "setting-name", (void *) observe_string_cb, &setting_value);
ASSERT_EQ(result, NIX_OK);
ASSERT_STREQ("new-value", value);
ASSERT_STREQ("new-value", setting_value.c_str());
}
TEST_F(nix_api_util_context, nix_err_msg)
@ -100,26 +105,26 @@ TEST_F(nix_api_util_context, nix_err_msg)
TEST_F(nix_api_util_context, nix_err_info_msg)
{
std::string err_info;
// no error
EXPECT_THROW(nix_err_info_msg(NULL, ctx, NULL, 256), nix::Error);
EXPECT_THROW(nix_err_info_msg(NULL, ctx, (void *) observe_string_cb, &err_info), nix::Error);
try {
throw nix::Error("testing error");
} catch (...) {
nix_context_error(ctx);
}
char buf[256];
nix_err_info_msg(nix_c_context_create(), ctx, buf, 256);
ASSERT_EQ(std::string(buf), "testing error");
// should overflow
EXPECT_THROW(nix_err_info_msg(NULL, ctx, buf, 1), nix::Error);
nix_err_info_msg(nix_c_context_create(), ctx, (void *) observe_string_cb, &err_info);
ASSERT_STREQ("testing error", err_info.c_str());
}
TEST_F(nix_api_util_context, nix_err_name)
{
std::string err_name;
// no error
EXPECT_THROW(nix_err_name(NULL, ctx, NULL, 256), nix::Error);
EXPECT_THROW(nix_err_name(NULL, ctx, (void *) observe_string_cb, &err_name), nix::Error);
std::string err_msg_ref;
try {
@ -127,12 +132,8 @@ TEST_F(nix_api_util_context, nix_err_name)
} catch (...) {
nix_context_error(ctx);
}
char err_name[32];
nix_err_name(nix_c_context_create(), ctx, err_name, 32);
nix_err_name(nix_c_context_create(), ctx, (void *) observe_string_cb, &err_name);
ASSERT_EQ(std::string(err_name), "nix::Error");
// overflow
EXPECT_THROW(nix_err_name(NULL, ctx, err_name, 1), nix::Error);
}
TEST_F(nix_api_util_context, nix_err_code)
@ -141,4 +142,5 @@ TEST_F(nix_api_util_context, nix_err_code)
nix_set_err_msg(ctx, NIX_ERR_UNKNOWN, "unknown test error");
ASSERT_EQ(nix_err_code(ctx), NIX_ERR_UNKNOWN);
}
}