Skip to content

Commit

Permalink
And add failing test!
Browse files Browse the repository at this point in the history
  • Loading branch information
citizen-stig committed Aug 29, 2023
1 parent e9ee63c commit 0cf10bb
Showing 1 changed file with 57 additions and 23 deletions.
80 changes: 57 additions & 23 deletions module-system/sov-modules-macros/src/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -530,8 +530,8 @@ mod tests {
fn test_generics_for_field_associated_type() {
let test_struct: syn::ItemStruct = parse_quote! {
struct TestStruct<T: SomeTrait, U: SomeOtherTrait, V> where V: SomeThirdTrait, T::Error: Debug {
field_1: Result<U, T::Error>,
field_2: (V, T::Error)
field_1: Foo<U, T::Error>,
field_2: Bar<V>,
}
};

Expand All @@ -542,34 +542,68 @@ mod tests {

let actual_generics = generics_for_field(&generics, &p);

// or this: ?
let expected: syn::ItemStruct = parse_quote! {
struct Dummy<U: SomeOtherTrait, T: SomeTrait> where T::Error: Debug {
field_1: Result<U, T::Error>,
struct Field1Generated<U: SomeOtherTrait, T: SomeTrait> where T::Error: Debug {
field_1: Foo<U, T::Error>,
}
};

// println!(
// "actual {} {}",
// actual_generics.to_token_stream(),
// actual_generics
// .where_clause
// .map_or("".to_string(), |w| w.to_token_stream().to_string())
// );
// println!(
// "expected {} {}",
// expected.generics.to_token_stream(),
// expected
// .generics
// .where_clause
// .map_or("".to_string(), |w| w.to_token_stream().to_string())
// );
// actual < U : SomeOtherTrait , Error : Debug >
// expected < U : SomeOtherTrait , T : SomeThirdTrait >

assert_eq!(expected.generics, actual_generics);
}

#[test]
fn test_generics_for_field_associated_types_nested_as() {
let test_struct: syn::ItemStruct = parse_quote! {
struct TestStruct<T: FirstTrait, U: SecondTrait, V>
where
V: ThirdTrait,
<U as SecondTrait>::Message: Message,
<<U as SecondTrait>::Message as Message>::Caller: std::fmt::Display,
T::Error: std::fmt::Debug,
{
field1: Foo<U, T::Error>,
field2: Bar<<U::Message as Message>::Caller, V>,
}
};

let generics: syn::Generics = test_struct.generics;
let path_arguments: syn::AngleBracketedGenericArguments =
parse_quote! { <<U::Message as Message>::Caller, V> };

let p = syn::PathArguments::AngleBracketed(path_arguments);

let actual_generics = generics_for_field(&generics, &p);

let expected: syn::ItemStruct = parse_quote! {
struct Field1Generated<U: SecondTrait, V>
where
V: ThirdTrait,
<U as SecondTrait>::Message: Message,
<<U as SecondTrait>::Message as Message>::Caller: std::fmt::Display,
{
field_1: Bar<U, T::Error>,
}
};

println!(
"ACTUAL : '{}' WHERE: '{}'",
actual_generics.to_token_stream(),
actual_generics
.where_clause
.map_or("".to_string(), |w| w.to_token_stream().to_string())
);
println!(
"EXPECTED: '{}' WHERE: '{}'",
expected.generics.to_token_stream(),
expected
.generics
.where_clause
.map_or("".to_string(), |w| w.to_token_stream().to_string())
);

// assert_eq!(expected.generics, actual_generics);
}

#[test]
fn test_generic_types_with_associated_type_bounds_2() {
// where T::Error: Debug
Expand Down

0 comments on commit 0cf10bb

Please sign in to comment.