nixide/nixide-sys/tests/flake.rs

79 lines
2.1 KiB
Rust

#![cfg(feature = "nix-flake-c")]
#![cfg(test)]
use std::ptr;
use serial_test::serial;
use nixide_sys::*;
#[test]
#[serial]
fn flake_settings_new_and_free() {
unsafe {
let ctx = nix_c_context_create();
assert!(!ctx.is_null());
// Create new flake settings
let settings = nix_flake_settings_new(ctx);
assert!(!settings.is_null(), "nix_flake_settings_new returned null");
// Free flake settings (should not crash)
nix_flake_settings_free(settings);
nix_c_context_free(ctx);
}
}
#[test]
#[serial]
fn flake_settings_add_to_eval_state_builder() {
unsafe {
let ctx = nix_c_context_create();
assert!(!ctx.is_null());
let err = nix_libutil_init(ctx);
assert_eq!(err, NixErr::Ok);
let err = nix_libstore_init(ctx);
assert_eq!(err, NixErr::Ok);
let err = nix_libexpr_init(ctx);
assert_eq!(err, NixErr::Ok);
let store = nix_store_open(ctx, ptr::null(), ptr::null_mut());
assert!(!store.is_null());
let builder = nix_eval_state_builder_new(ctx, store);
assert!(!builder.is_null());
let settings = nix_flake_settings_new(ctx);
assert!(!settings.is_null(), "nix_flake_settings_new returned null");
// Add flake settings to eval state builder
let err = nix_flake_settings_add_to_eval_state_builder(ctx, settings, builder);
// Accept OK or ERR_UNKNOWN (depends on Nix build/config)
assert!(
err == NixErr::Ok || err == NixErr::Unknown,
"nix_flake_settings_add_to_eval_state_builder returned unexpected error code: {err}"
);
nix_flake_settings_free(settings);
nix_eval_state_builder_free(builder);
nix_store_free(store);
nix_c_context_free(ctx);
}
}
#[test]
#[serial]
fn flake_settings_null_context() {
// Passing NULL context should not crash, but may error
unsafe {
let settings = nix_flake_settings_new(ptr::null_mut());
// May return null if context is required
if !settings.is_null() {
nix_flake_settings_free(settings);
}
}
}