fix(tvix/nix-compat-derive-tests) More enum tests

Before this commit only deriving of tuple enums where tested.
This adds a few tests to cover the other types of enums.

Change-Id: I62f311e4db98cab84bd4ac164d50051e9aab0d4d
Reviewed-on: https://cl.tvl.fyi/c/depot/+/12725
Autosubmit: Brian Olsen <me@griff.name>
Reviewed-by: Vladimir Kryachko <v.kryachko@gmail.com>
Reviewed-by: flokli <flokli@flokli.de>
Tested-by: BuildkiteCI
This commit is contained in:
Brian Olsen 2024-11-03 20:15:34 +01:00 committed by clbot
parent 28dbf5f0eb
commit 6f914bc0fa

View file

@ -356,16 +356,35 @@ async fn read_from_u64_reader_error() {
#[derive(Debug, PartialEq, Eq, NixDeserialize)]
enum TestEnum {
#[nix(version = "..=19")]
Pre20(TestTryFromU64),
#[nix(version = "20..")]
Pre20(TestTryFromU64, #[nix(version = "10..")] u64),
#[nix(version = "20..=29")]
Post20(StructVersionTest),
#[nix(version = "30..=39")]
Post30,
#[nix(version = "40..")]
Post40 {
msg: String,
#[nix(version = "45..")]
level: u64,
},
}
#[tokio::test]
async fn read_enum_9() {
let mut mock = Builder::new().version((1, 9)).read_number(42).build();
let value = mock.read_value::<TestEnum>().await.unwrap();
assert_eq!(TestEnum::Pre20(TestTryFromU64, 0), value);
}
#[tokio::test]
async fn read_enum_19() {
let mut mock = Builder::new().version((1, 19)).read_number(42).build();
let mut mock = Builder::new()
.version((1, 19))
.read_number(42)
.read_number(666)
.build();
let value = mock.read_value::<TestEnum>().await.unwrap();
assert_eq!(TestEnum::Pre20(TestTryFromU64), value);
assert_eq!(TestEnum::Pre20(TestTryFromU64, 666), value);
}
#[tokio::test]
@ -385,6 +404,46 @@ async fn read_enum_20() {
);
}
#[tokio::test]
async fn read_enum_30() {
let mut mock = Builder::new().version((1, 30)).build();
let value = mock.read_value::<TestEnum>().await.unwrap();
assert_eq!(TestEnum::Post30, value);
}
#[tokio::test]
async fn read_enum_40() {
let mut mock = Builder::new()
.version((1, 40))
.read_slice(b"hello world")
.build();
let value = mock.read_value::<TestEnum>().await.unwrap();
assert_eq!(
TestEnum::Post40 {
msg: "hello world".into(),
level: 0,
},
value
);
}
#[tokio::test]
async fn read_enum_45() {
let mut mock = Builder::new()
.version((1, 45))
.read_slice(b"hello world")
.read_number(9001)
.build();
let value = mock.read_value::<TestEnum>().await.unwrap();
assert_eq!(
TestEnum::Post40 {
msg: "hello world".into(),
level: 9001,
},
value
);
}
#[tokio::test]
async fn read_enum_reader_error() {
let mut mock = Builder::new()
@ -396,8 +455,8 @@ async fn read_enum_reader_error() {
}
#[tokio::test]
async fn read_enum_invalid_data_19() {
let mut mock = Builder::new().version((1, 19)).read_number(666).build();
async fn read_enum_invalid_data_9() {
let mut mock = Builder::new().version((1, 9)).read_number(666).build();
let err = mock.read_value::<TestEnum>().await.unwrap_err();
assert_eq!(Error::InvalidData("666".into()), err);
}