use crate::common::proxies::control_proxy::ControlProxy;
use crate::universal::{PLATFORM_STRING, setup};
use googletest::prelude::*;
use rstest::*;
use tokio;
use zbus::Connection;
use zbus::Result;
#[gtest]
#[tokio::test]
#[rstest]
#[case::no_device_handle(
PLATFORM_STRING,
"",
0,
err(displays_as(contains_substring("FpgadError::Argument:")))
)]
#[case::bad_device_handle(
PLATFORM_STRING,
"dev0",
0,
err(displays_as(contains_substring("FpgadError::Argument:")))
)]
#[case::no_platform_str(
"",
"fpga0",
0,
ok(contains_substring("Flags set to '0x0' for 'fpga0'"))
)]
#[case::max_u32_val(
PLATFORM_STRING,
"fpga0",
u32::MAX,
ok(contains_substring("Flags set to"))
)]
#[case::bad_platform_string(
"xln",
"fpga0",
0,
err(displays_as(contains_substring("FpgadError::Argument:")))
)]
#[case::all_good(
PLATFORM_STRING,
"fpga0",
0,
ok(contains_substring("Flags set to '0x0' for 'fpga0'"))
)]
async fn cases<M: for<'a> Matcher<&'a Result<String>>>(
#[case] platform_string: &str,
#[case] device_hande: &str,
#[case] flags: u32,
#[case] condition: M,
_setup: (),
) {
let connection = Connection::system()
.await
.expect("failed to create connection");
let proxy = ControlProxy::new(&connection)
.await
.expect("failed to create control proxy");
let res = proxy
.set_fpga_flags(platform_string, device_hande, flags)
.await;
expect_that!(&res, condition)
}