blob: 3298e36dd631737e1dceb00b2f1dbc637c549390 [file] [log] [blame]
// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
use googletest::prelude::*;
use indoc::indoc;
#[test]
fn matches_struct_containing_single_field() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
}
let actual = AStruct { a_field: 123 };
verify_that!(actual, matches_pattern!(AStruct { a_field: eq(123) }))
}
#[test]
fn matches_struct_containing_two_fields() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
let actual = AStruct { a_field: 123, another_field: 234 };
verify_that!(actual, matches_pattern!(AStruct { a_field: eq(123), another_field: eq(234) }))
}
#[test]
#[rustfmt::skip]// Otherwise fmt strips the trailing comma
fn supports_trailing_comma_with_one_field() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
}
let actual = AStruct { a_field: 123 };
verify_that!(actual, matches_pattern!(AStruct {
a_field: eq(123), // Block reformatting
}))
}
#[test]
fn supports_trailing_comma_with_two_fields() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
let actual = AStruct { a_field: 123, another_field: 234 };
verify_that!(
actual,
matches_pattern!(AStruct {
a_field: eq(123),
another_field: eq(234), // Block reformatting
})
)
}
#[test]
fn supports_trailing_comma_with_three_fields() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
a_third_field: u32,
}
let actual = AStruct { a_field: 123, another_field: 234, a_third_field: 345 };
verify_that!(
actual,
matches_pattern!(AStruct {
a_field: eq(123),
another_field: eq(234),
a_third_field: eq(345),
})
)
}
#[test]
fn matches_struct_containing_nested_struct_with_field() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_nested_struct: ANestedStruct,
}
#[derive(Debug)]
struct ANestedStruct {
a_field: u32,
}
let actual = AStruct { a_nested_struct: ANestedStruct { a_field: 123 } };
verify_that!(
actual,
matches_pattern!(AStruct { a_nested_struct: pat!(ANestedStruct { a_field: eq(123) }) })
)
}
#[test]
fn has_correct_assertion_failure_message_for_single_field() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
}
let actual = AStruct { a_field: 123 };
let result = verify_that!(actual, matches_pattern!(AStruct { a_field: eq(234) }));
verify_that!(
result,
err(displays_as(contains_substring(indoc! {"
Value of: actual
Expected: is AStruct which has field `a_field`, which is equal to 234
Actual: AStruct { a_field: 123 },
which has field `a_field`, which isn't equal to 234
"
})))
)
}
#[test]
fn has_correct_assertion_failure_message_for_two_fields() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
let actual = AStruct { a_field: 123, another_field: 234 };
let result = verify_that!(
actual,
matches_pattern!(AStruct { a_field: eq(234), another_field: eq(123) })
);
verify_that!(
result,
err(displays_as(contains_substring(indoc!(
"
Value of: actual
Expected: is AStruct which has all the following properties:
* has field `a_field`, which is equal to 234
* has field `another_field`, which is equal to 123
Actual: AStruct { a_field: 123, another_field: 234 },
* which has field `a_field`, which isn't equal to 234
* which has field `another_field`, which isn't equal to 123"
))))
)
}
#[test]
fn has_correct_assertion_failure_message_for_field_and_property() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn get_field(&self) -> u32 {
self.a_field
}
}
let actual = AStruct { a_field: 123, another_field: 234 };
let result = verify_that!(
actual,
matches_pattern!(AStruct { get_field(): eq(234), another_field: eq(123) })
);
verify_that!(
result,
err(displays_as(contains_substring(indoc!(
"
Value of: actual
Expected: is AStruct which has all the following properties:
* has property `get_field ()`, which is equal to 234
* has field `another_field`, which is equal to 123
Actual: AStruct { a_field: 123, another_field: 234 },
* whose property `get_field ()` is `123`, which isn't equal to 234
* which has field `another_field`, which isn't equal to 123"
))))
)
}
#[test]
fn has_meaningful_assertion_failure_message_when_wrong_enum_variant_is_used() -> Result<()> {
#[derive(Debug)]
enum AnEnum {
A(u32),
#[allow(unused)]
B(u32),
}
let actual = AnEnum::A(123);
let result = verify_that!(actual, matches_pattern!(AnEnum::B(eq(123))));
verify_that!(
result,
err(displays_as(contains_substring(indoc! {"
Actual: A(123),
which has the wrong enum variant `A`
"
})))
)
}
#[test]
fn supports_qualified_struct_names() -> Result<()> {
mod a_module {
#[derive(Debug)]
pub(super) struct AStruct {
pub(super) a_field: u32,
}
}
let actual = a_module::AStruct { a_field: 123 };
verify_that!(actual, matches_pattern!(a_module::AStruct { a_field: eq(123) }))
}
#[test]
fn matches_tuple_struct_containing_single_field() -> Result<()> {
#[derive(Debug)]
struct AStruct(u32);
let actual = AStruct(123);
verify_that!(actual, matches_pattern!(AStruct(eq(123))))
}
#[test]
fn matches_tuple_struct_containing_two_fields() -> Result<()> {
#[derive(Debug)]
struct AStruct(u32, u32);
let actual = AStruct(123, 234);
verify_that!(actual, matches_pattern!(AStruct(eq(123), eq(234))))
}
#[test]
fn matches_tuple_struct_containing_three_fields() -> Result<()> {
#[derive(Debug)]
struct AStruct(u32, u32, u32);
let actual = AStruct(123, 234, 345);
verify_that!(actual, matches_pattern!(AStruct(eq(123), eq(234), eq(345))))
}
#[test]
fn matches_tuple_struct_containing_four_fields() -> Result<()> {
#[derive(Debug)]
struct AStruct(u32, u32, u32, u32);
let actual = AStruct(123, 234, 345, 456);
verify_that!(actual, matches_pattern!(AStruct(eq(123), eq(234), eq(345), eq(456))))
}
#[test]
fn matches_tuple_struct_containing_five_fields() -> Result<()> {
#[derive(Debug)]
struct AStruct(u32, u32, u32, u32, u32);
let actual = AStruct(123, 234, 345, 456, 567);
verify_that!(actual, matches_pattern!(AStruct(eq(123), eq(234), eq(345), eq(456), eq(567))))
}
#[test]
fn matches_tuple_struct_containing_six_fields() -> Result<()> {
#[derive(Debug)]
struct AStruct(u32, u32, u32, u32, u32, u32);
let actual = AStruct(123, 234, 345, 456, 567, 678);
verify_that!(
actual,
matches_pattern!(AStruct(eq(123), eq(234), eq(345), eq(456), eq(567), eq(678)))
)
}
#[test]
fn matches_tuple_struct_containing_seven_fields() -> Result<()> {
#[derive(Debug)]
struct AStruct(u32, u32, u32, u32, u32, u32, u32);
let actual = AStruct(123, 234, 345, 456, 567, 678, 789);
verify_that!(
actual,
matches_pattern!(AStruct(eq(123), eq(234), eq(345), eq(456), eq(567), eq(678), eq(789)))
)
}
#[test]
fn matches_tuple_struct_containing_eight_fields() -> Result<()> {
#[derive(Debug)]
struct AStruct(u32, u32, u32, u32, u32, u32, u32, u32);
let actual = AStruct(123, 234, 345, 456, 567, 678, 789, 890);
verify_that!(
actual,
matches_pattern!(AStruct(
eq(123),
eq(234),
eq(345),
eq(456),
eq(567),
eq(678),
eq(789),
eq(890)
))
)
}
#[test]
fn matches_tuple_struct_containing_nine_fields() -> Result<()> {
#[derive(Debug)]
struct AStruct(u32, u32, u32, u32, u32, u32, u32, u32, u32);
let actual = AStruct(123, 234, 345, 456, 567, 678, 789, 890, 901);
verify_that!(
actual,
matches_pattern!(AStruct(
eq(123),
eq(234),
eq(345),
eq(456),
eq(567),
eq(678),
eq(789),
eq(890),
eq(901)
))
)
}
#[test]
fn matches_tuple_struct_containing_ten_fields() -> Result<()> {
#[derive(Debug)]
struct AStruct(u32, u32, u32, u32, u32, u32, u32, u32, u32, u32);
let actual = AStruct(123, 234, 345, 456, 567, 678, 789, 890, 901, 12);
verify_that!(
actual,
matches_pattern!(AStruct(
eq(123),
eq(234),
eq(345),
eq(456),
eq(567),
eq(678),
eq(789),
eq(890),
eq(901),
eq(12)
))
)
}
#[test]
fn matches_tuple_struct_with_trailing_comma() -> Result<()> {
#[derive(Debug)]
struct AStruct(u32);
let actual = AStruct(123);
verify_that!(
actual,
matches_pattern!(AStruct(
eq(123), // Keep the trailing comma, block reformatting
))
)
}
#[test]
fn matches_tuple_struct_with_two_fields_and_trailing_comma() -> Result<()> {
#[derive(Debug)]
struct AStruct(u32, u32);
let actual = AStruct(123, 234);
verify_that!(
actual,
matches_pattern!(AStruct(
eq(123),
eq(234), // Keep the trailing comma, block reformatting
))
)
}
#[test]
fn matches_enum_without_field() -> Result<()> {
#[derive(Debug)]
enum AnEnum {
A,
}
let actual = AnEnum::A;
verify_that!(actual, matches_pattern!(AnEnum::A))
}
#[rustversion::before(1.76)]
const ANENUM_A_REPR: &str = "AnEnum :: A";
#[rustversion::since(1.76)]
const ANENUM_A_REPR: &str = "AnEnum::A";
#[test]
fn generates_correct_failure_output_when_enum_variant_without_field_is_not_matched() -> Result<()> {
#[derive(Debug)]
enum AnEnum {
#[allow(unused)]
A,
B,
}
let actual = AnEnum::B;
let result = verify_that!(actual, matches_pattern!(AnEnum::A));
verify_that!(result, err(displays_as(contains_substring(format!("is not {ANENUM_A_REPR}")))))
}
#[test]
fn generates_correct_failure_output_when_enum_variant_without_field_is_matched() -> Result<()> {
#[derive(Debug)]
enum AnEnum {
A,
}
let actual = AnEnum::A;
let result = verify_that!(actual, not(matches_pattern!(AnEnum::A)));
verify_that!(result, err(displays_as(contains_substring(format!("is {ANENUM_A_REPR}")))))
}
#[test]
fn matches_enum_with_field() -> Result<()> {
#[derive(Debug)]
enum AnEnum {
A(u32),
}
let actual = AnEnum::A(123);
verify_that!(actual, matches_pattern!(AnEnum::A(eq(123))))
}
#[test]
fn does_not_match_wrong_enum_value() -> Result<()> {
#[derive(Debug)]
enum AnEnum {
#[allow(unused)]
A(u32),
B,
}
let actual = AnEnum::B;
verify_that!(actual, not(matches_pattern!(AnEnum::A(eq(123)))))
}
#[test]
fn includes_enum_variant_in_description_with_field() -> Result<()> {
#[derive(Debug)]
enum AnEnum {
A(u32),
}
let actual = AnEnum::A(123);
let result = verify_that!(actual, matches_pattern!(AnEnum::A(eq(234))));
verify_that!(
result,
err(displays_as(contains_substring(format!(
"Expected: is {ANENUM_A_REPR} which has field `0`"
))))
)
}
#[test]
fn includes_enum_variant_in_negative_description_with_field() -> Result<()> {
#[derive(Debug)]
enum AnEnum {
A(u32),
}
let actual = AnEnum::A(123);
let result = verify_that!(actual, not(matches_pattern!(AnEnum::A(eq(123)))));
verify_that!(
result,
err(displays_as(contains_substring(format!(
"Expected: is not {ANENUM_A_REPR} which has field `0`, which is equal to"
))))
)
}
#[test]
fn includes_enum_variant_in_description_with_two_fields() -> Result<()> {
#[derive(Debug)]
enum AnEnum {
A(u32, u32),
}
let actual = AnEnum::A(123, 234);
let result = verify_that!(actual, matches_pattern!(AnEnum::A(eq(234), eq(234))));
verify_that!(
result,
err(displays_as(contains_substring(format!(
"Expected: is {ANENUM_A_REPR} which has all the following properties"
))))
)
}
#[test]
fn includes_enum_variant_in_description_with_three_fields() -> Result<()> {
#[derive(Debug)]
enum AnEnum {
A(u32, u32, u32),
}
let actual = AnEnum::A(123, 234, 345);
let result = verify_that!(actual, matches_pattern!(AnEnum::A(eq(234), eq(234), eq(345))));
verify_that!(
result,
err(displays_as(contains_substring(format!(
"Expected: is {ANENUM_A_REPR} which has all the following properties"
))))
)
}
#[test]
fn includes_enum_variant_in_description_with_named_field() -> Result<()> {
#[derive(Debug)]
enum AnEnum {
A { field: u32 },
}
let actual = AnEnum::A { field: 123 };
let result = verify_that!(actual, matches_pattern!(AnEnum::A { field: eq(234) }));
verify_that!(
result,
err(displays_as(contains_substring(format!(
"Expected: is {ANENUM_A_REPR} which has field `field`"
))))
)
}
#[test]
fn includes_enum_variant_in_description_with_two_named_fields() -> Result<()> {
#[derive(Debug)]
enum AnEnum {
A { field: u32, another_field: u32 },
}
let actual = AnEnum::A { field: 123, another_field: 234 };
let result = verify_that!(
actual,
matches_pattern!(AnEnum::A { field: eq(234), another_field: eq(234) })
);
verify_that!(
result,
err(displays_as(contains_substring(format!(
"Expected: is {ANENUM_A_REPR} which has all the following properties"
))))
)
}
#[test]
fn includes_struct_name_in_description_with_property() -> Result<()> {
#[derive(Debug)]
struct AStruct {
field: u32,
}
impl AStruct {
fn get_field(&self) -> u32 {
self.field
}
}
let actual = AStruct { field: 123 };
let result = verify_that!(actual, matches_pattern!(AStruct { get_field(): eq(234) }));
verify_that!(
result,
err(displays_as(contains_substring(
"Expected: is AStruct which has property `get_field ()`"
)))
)
}
#[test]
fn includes_struct_name_in_description_with_ref_property() -> Result<()> {
#[derive(Debug)]
struct AStruct {
field: u32,
}
impl AStruct {
fn get_field(&self) -> &u32 {
&self.field
}
}
let actual = AStruct { field: 123 };
let result = verify_that!(actual, matches_pattern!(AStruct { *get_field(): eq(234) }));
verify_that!(
result,
err(displays_as(contains_substring(
"Expected: is AStruct which has property `get_field ()`"
)))
)
}
#[test]
fn includes_struct_name_in_description_with_property_after_field() -> Result<()> {
#[derive(Debug)]
struct AStruct {
field: u32,
}
impl AStruct {
fn get_field(&self) -> u32 {
self.field
}
}
let actual = AStruct { field: 123 };
let result =
verify_that!(actual, matches_pattern!(AStruct { field: eq(123), get_field(): eq(234) }));
verify_that!(
result,
err(displays_as(contains_substring(
"Expected: is AStruct which has all the following properties"
)))
)
}
#[test]
fn includes_struct_name_in_description_with_ref_property_after_field() -> Result<()> {
#[derive(Debug)]
struct AStruct {
field: u32,
}
impl AStruct {
fn get_field(&self) -> &u32 {
&self.field
}
}
let actual = AStruct { field: 123 };
let result =
verify_that!(actual, matches_pattern!(AStruct { field: eq(123), *get_field(): eq(234) }));
verify_that!(
result,
err(displays_as(contains_substring(
"Expected: is AStruct which has all the following properties"
)))
)
}
#[test]
fn matches_struct_with_a_method() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
}
impl AStruct {
fn get_field(&self) -> u32 {
self.a_field
}
}
let actual = AStruct { a_field: 123 };
verify_that!(actual, matches_pattern!(AStruct { get_field(): eq(123) }))
}
#[test]
fn matches_struct_with_a_method_and_trailing_comma() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
}
impl AStruct {
fn get_field(&self) -> u32 {
self.a_field
}
}
let actual = AStruct { a_field: 123 };
verify_that!(actual, matches_pattern!(AStruct { get_field(): eq(123), }))
}
#[test]
fn matches_struct_with_a_method_taking_parameter() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
}
impl AStruct {
fn add_to_field(&self, a: u32) -> u32 {
self.a_field + a
}
}
let actual = AStruct { a_field: 1 };
verify_that!(actual, matches_pattern!(AStruct { add_to_field(2): eq(3) }))
}
#[test]
fn matches_struct_with_a_method_taking_two_parameters() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
}
impl AStruct {
fn add_product_to_field(&self, a: u32, b: u32) -> u32 {
self.a_field + a * b
}
}
let actual = AStruct { a_field: 1 };
verify_that!(actual, matches_pattern!(AStruct { add_product_to_field(2, 3): eq(7) }))
}
#[test]
fn matches_struct_with_a_method_taking_enum_value_parameter() -> Result<()> {
enum AnEnum {
AVariant,
}
#[derive(Debug)]
struct AStruct {
a_field: u32,
}
impl AStruct {
fn get_a_field(&self, _value: AnEnum) -> u32 {
self.a_field
}
}
let actual = AStruct { a_field: 1 };
verify_that!(actual, matches_pattern!(AStruct { get_a_field(AnEnum::AVariant): eq(1) }))
}
#[test]
fn matches_struct_with_a_method_taking_two_parameters_with_trailing_comma() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
}
impl AStruct {
fn add_product_to_field(&self, a: u32, b: u32) -> u32 {
self.a_field + a * b
}
}
let actual = AStruct { a_field: 1 };
verify_that!(actual, matches_pattern!(AStruct { add_product_to_field(2, 3,): eq(7) }))
}
#[test]
fn matches_struct_with_a_method_returning_a_reference() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
}
impl AStruct {
fn get_field_ref(&self) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 123 };
verify_that!(actual, matches_pattern!(AStruct { *get_field_ref(): eq(123) }))
}
#[test]
fn matches_struct_with_a_method_returning_a_reference_with_trailing_comma() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
}
impl AStruct {
fn get_field_ref(&self) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 123 };
verify_that!(actual, matches_pattern!(AStruct { *get_field_ref(): eq(123), }))
}
#[test]
fn matches_struct_with_a_method_taking_two_parameters_ret_ref() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
}
impl AStruct {
fn get_field_ref(&self, _a: u32, _b: u32) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 1 };
verify_that!(actual, matches_pattern!(AStruct { *get_field_ref(2, 3): eq(1) }))
}
#[test]
fn matches_struct_with_a_method_returning_reference_taking_enum_value_parameter() -> Result<()> {
enum AnEnum {
AVariant,
}
#[derive(Debug)]
struct AStruct {
a_field: u32,
}
impl AStruct {
fn get_field_ref(&self, _value: AnEnum) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 1 };
verify_that!(actual, matches_pattern!(AStruct { *get_field_ref(AnEnum::AVariant): eq(1) }))
}
#[test]
fn matches_struct_with_a_method_taking_two_parameters_with_trailing_comma_ret_ref() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
}
impl AStruct {
fn get_field_ref(&self, _a: u32, _b: u32) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 1 };
verify_that!(actual, matches_pattern!(AStruct { *get_field_ref(2, 3,): eq(1) }))
}
#[test]
fn matches_struct_with_a_method_followed_by_a_field() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn get_field(&self) -> u32 {
self.a_field
}
}
let actual = AStruct { a_field: 123, another_field: 234 };
verify_that!(actual, matches_pattern!(AStruct { get_field(): eq(123), another_field: eq(234) }))
}
#[test]
fn matches_struct_with_a_method_followed_by_a_field_with_trailing_comma() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn get_field(&self) -> u32 {
self.a_field
}
}
let actual = AStruct { a_field: 123, another_field: 234 };
verify_that!(
actual,
matches_pattern!(AStruct { get_field(): eq(123), another_field: eq(234), })
)
}
#[test]
fn matches_struct_with_a_method_taking_two_parameters_and_field() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn add_product_to_field(&self, a: u32, b: u32) -> u32 {
self.a_field + a * b
}
}
let actual = AStruct { a_field: 1, another_field: 123 };
verify_that!(
actual,
matches_pattern!(AStruct { add_product_to_field(2, 3): eq(7), another_field: eq(123) })
)
}
#[test]
fn matches_struct_with_a_method_taking_enum_value_parameter_followed_by_field() -> Result<()> {
enum AnEnum {
AVariant,
}
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn get_field(&self, _value: AnEnum) -> u32 {
self.a_field
}
}
let actual = AStruct { a_field: 1, another_field: 2 };
verify_that!(
actual,
matches_pattern!(AStruct { get_field(AnEnum::AVariant): eq(1), another_field: eq(2) })
)
}
#[test]
fn matches_struct_with_a_method_taking_two_parameters_with_trailing_comma_and_field() -> Result<()>
{
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn add_product_to_field(&self, a: u32, b: u32) -> u32 {
self.a_field + a * b
}
}
let actual = AStruct { a_field: 1, another_field: 123 };
verify_that!(
actual,
matches_pattern!(AStruct { add_product_to_field(2, 3,): eq(7), another_field: eq(123) })
)
}
#[test]
fn matches_struct_with_a_method_returning_reference_followed_by_a_field() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn get_field_ref(&self) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 123, another_field: 234 };
verify_that!(
actual,
matches_pattern!(AStruct { *get_field_ref(): eq(123), another_field: eq(234) })
)
}
#[test]
fn matches_struct_with_a_method_returning_reference_followed_by_a_field_with_trailing_comma()
-> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn get_field_ref(&self) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 123, another_field: 234 };
verify_that!(
actual,
matches_pattern!(AStruct { *get_field_ref(): eq(123), another_field: eq(234), })
)
}
#[test]
fn matches_struct_with_a_method_taking_two_parameters_ret_ref_and_field() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn get_field_ref(&self, _a: u32, _b: u32) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 1, another_field: 123 };
verify_that!(
actual,
matches_pattern!(AStruct { *get_field_ref(2, 3): eq(1), another_field: eq(123) })
)
}
#[test]
fn matches_struct_with_a_method_taking_enum_value_param_ret_ref_followed_by_field() -> Result<()> {
enum AnEnum {
AVariant,
}
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn get_field_ref(&self, _value: AnEnum) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 1, another_field: 2 };
verify_that!(
actual,
matches_pattern!(AStruct { *get_field_ref(AnEnum::AVariant): eq(1), another_field: eq(2) })
)
}
#[test]
fn matches_struct_with_a_method_taking_two_parameters_with_trailing_comma_ret_ref_and_field()
-> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn get_field_ref(&self, _a: u32, _b: u32) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 1, another_field: 123 };
verify_that!(
actual,
matches_pattern!(AStruct { *get_field_ref(2, 3,): eq(1), another_field: eq(123) })
)
}
#[test]
fn matches_struct_with_a_field_followed_by_a_method() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn get_field(&self) -> u32 {
self.a_field
}
}
let actual = AStruct { a_field: 123, another_field: 234 };
verify_that!(actual, matches_pattern!(AStruct { another_field: eq(234), get_field(): eq(123) }))
}
#[test]
fn matches_struct_with_a_field_followed_by_a_method_with_trailing_comma() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn get_field(&self) -> u32 {
self.a_field
}
}
let actual = AStruct { a_field: 123, another_field: 234 };
verify_that!(
actual,
matches_pattern!(AStruct { another_field: eq(234), get_field(): eq(123), })
)
}
#[test]
fn matches_struct_with_a_field_followed_by_a_method_with_params() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn add_product_to_field(&self, a: u32, b: u32) -> u32 {
self.a_field + a * b
}
}
let actual = AStruct { a_field: 1, another_field: 234 };
verify_that!(
actual,
matches_pattern!(AStruct { another_field: eq(234), add_product_to_field(2, 3): eq(7) })
)
}
#[test]
fn matches_struct_with_field_followed_by_method_taking_enum_value_param() -> Result<()> {
enum AnEnum {
AVariant,
}
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn get_field(&self, _value: AnEnum) -> u32 {
self.a_field
}
}
let actual = AStruct { a_field: 1, another_field: 2 };
verify_that!(
actual,
matches_pattern!(AStruct { another_field: eq(2), get_field(AnEnum::AVariant): eq(1) })
)
}
#[test]
fn matches_struct_with_a_field_followed_by_a_method_with_params_and_trailing_comma() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn add_product_to_field(&self, a: u32, b: u32) -> u32 {
self.a_field + a * b
}
}
let actual = AStruct { a_field: 1, another_field: 234 };
verify_that!(
actual,
matches_pattern!(AStruct { another_field: eq(234), add_product_to_field(2, 3,): eq(7) })
)
}
#[test]
fn matches_struct_with_a_field_followed_by_a_method_returning_reference() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn get_field_ref(&self) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 123, another_field: 234 };
verify_that!(
actual,
matches_pattern!(AStruct { another_field: eq(234), *get_field_ref(): eq(123) })
)
}
#[test]
fn matches_struct_with_a_field_followed_by_a_method_returning_ref_and_trailing_comma() -> Result<()>
{
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn get_field_ref(&self) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 123, another_field: 234 };
verify_that!(
actual,
matches_pattern!(AStruct { another_field: eq(234), *get_field_ref(): eq(123), })
)
}
#[test]
fn matches_struct_with_a_field_followed_by_a_method_with_params_ret_ref() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn get_field_ref(&self, _a: u32, _b: u32) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 123, another_field: 234 };
verify_that!(
actual,
matches_pattern!(AStruct { another_field: eq(234), *get_field_ref(2, 3): eq(123) })
)
}
#[test]
fn matches_struct_with_field_followed_by_method_taking_enum_value_param_ret_ref() -> Result<()> {
enum AnEnum {
AVariant,
}
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn get_field_ref(&self, _value: AnEnum) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 1, another_field: 2 };
verify_that!(
actual,
matches_pattern!(AStruct { another_field: eq(2), *get_field_ref(AnEnum::AVariant): eq(1) })
)
}
#[test]
fn matches_struct_with_a_field_followed_by_a_method_with_params_and_trailing_comma_ret_ref()
-> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
}
impl AStruct {
fn get_field_ref(&self, _a: u32, _b: u32) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 123, another_field: 234 };
verify_that!(
actual,
matches_pattern!(AStruct { another_field: eq(234), *get_field_ref(2, 3,): eq(123) })
)
}
#[test]
fn matches_struct_with_a_field_followed_by_a_method_followed_by_a_field() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
a_third_field: u32,
}
impl AStruct {
fn get_field(&self) -> u32 {
self.a_field
}
}
let actual = AStruct { a_field: 123, another_field: 234, a_third_field: 345 };
verify_that!(
actual,
matches_pattern!(AStruct {
another_field: eq(234),
get_field(): eq(123),
a_third_field: eq(345)
})
)
}
#[test]
fn matches_struct_with_a_field_followed_by_a_method_followed_by_a_field_with_trailing_comma()
-> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
a_third_field: u32,
}
impl AStruct {
fn get_field(&self) -> u32 {
self.a_field
}
}
let actual = AStruct { a_field: 123, another_field: 234, a_third_field: 345 };
verify_that!(
actual,
matches_pattern!(AStruct {
another_field: eq(234),
get_field(): eq(123),
a_third_field: eq(345),
})
)
}
#[test]
fn matches_struct_with_a_field_followed_by_a_method_with_params_followed_by_a_field() -> Result<()>
{
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
a_third_field: u32,
}
impl AStruct {
fn add_product_to_field(&self, a: u32, b: u32) -> u32 {
self.a_field + a * b
}
}
let actual = AStruct { a_field: 1, another_field: 234, a_third_field: 345 };
verify_that!(
actual,
matches_pattern!(AStruct {
another_field: eq(234),
add_product_to_field(2, 3): eq(7),
a_third_field: eq(345),
})
)
}
#[test]
fn matches_struct_with_a_field_followed_by_a_method_with_params_and_trailing_comma_followed_by_a_field()
-> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
a_third_field: u32,
}
impl AStruct {
fn add_product_to_field(&self, a: u32, b: u32) -> u32 {
self.a_field + a * b
}
}
let actual = AStruct { a_field: 1, another_field: 234, a_third_field: 345 };
verify_that!(
actual,
matches_pattern!(AStruct {
another_field: eq(234),
add_product_to_field(2, 3,): eq(7),
a_third_field: eq(345),
})
)
}
#[test]
fn matches_struct_with_field_followed_by_method_taking_enum_value_param_followed_by_field()
-> Result<()> {
enum AnEnum {
AVariant,
}
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
a_third_field: u32,
}
impl AStruct {
fn get_field(&self, _value: AnEnum) -> u32 {
self.a_field
}
}
let actual = AStruct { a_field: 1, another_field: 2, a_third_field: 3 };
verify_that!(
actual,
matches_pattern!(AStruct {
another_field: eq(2),
get_field(AnEnum::AVariant): eq(1),
a_third_field: eq(3),
})
)
}
#[test]
fn matches_struct_with_a_field_followed_by_a_method_ret_ref_followed_by_a_field() -> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
a_third_field: u32,
}
impl AStruct {
fn get_field_ref(&self) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 123, another_field: 234, a_third_field: 345 };
verify_that!(
actual,
matches_pattern!(AStruct {
another_field: eq(234),
*get_field_ref(): eq(123),
a_third_field: eq(345)
})
)
}
#[test]
fn matches_struct_with_a_field_followed_by_a_method_ret_ref_followed_by_a_field_with_trailing_comma()
-> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
a_third_field: u32,
}
impl AStruct {
fn get_field_ref(&self) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 123, another_field: 234, a_third_field: 345 };
verify_that!(
actual,
matches_pattern!(AStruct {
another_field: eq(234),
*get_field_ref(): eq(123),
a_third_field: eq(345),
})
)
}
#[test]
fn matches_struct_with_a_field_followed_by_a_method_with_params_ret_ref_followed_by_a_field()
-> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
a_third_field: u32,
}
impl AStruct {
fn get_field_ref(&self, _a: u32, _b: u32) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 123, another_field: 234, a_third_field: 345 };
verify_that!(
actual,
matches_pattern!(AStruct {
another_field: eq(234),
*get_field_ref(2, 3): eq(123),
a_third_field: eq(345),
})
)
}
#[test]
fn matches_struct_with_field_followed_by_method_taking_enum_value_param_ret_ref_followed_by_field()
-> Result<()> {
enum AnEnum {
AVariant,
}
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
a_third_field: u32,
}
impl AStruct {
fn get_field_ref(&self, _value: AnEnum) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 1, another_field: 2, a_third_field: 3 };
verify_that!(
actual,
matches_pattern!(AStruct {
another_field: eq(2),
*get_field_ref(AnEnum::AVariant): eq(1),
a_third_field: eq(3),
})
)
}
#[test]
fn matches_struct_with_a_field_followed_by_a_method_with_params_trailing_comma_ret_ref_followed_by_a_field()
-> Result<()> {
#[derive(Debug)]
struct AStruct {
a_field: u32,
another_field: u32,
a_third_field: u32,
}
impl AStruct {
fn get_field_ref(&self, _a: u32, _b: u32) -> &u32 {
&self.a_field
}
}
let actual = AStruct { a_field: 123, another_field: 234, a_third_field: 345 };
verify_that!(
actual,
matches_pattern!(AStruct {
another_field: eq(234),
*get_field_ref(2, 3,): eq(123),
a_third_field: eq(345),
})
)
}