// SPDX-FileCopyrightText: 2023 - 2024 Markus Haug (Korrat) // // SPDX-License-Identifier: EUPL-1.2 use core::fmt::Debug; use core::hash::Hash; use core::str::FromStr; use beancount_commodity::Commodity; use static_assertions::assert_impl_all; use test_case::test_case; assert_impl_all!( Commodity: Copy, Debug, FromStr, Hash, Ord, TryFrom<&'static str> ); #[test_case("A"; "single letter")] #[test_case("USD"; "dollar")] #[test_case("EUR"; "euro")] #[test_case("MSFT"; "stock")] #[test_case("AIRMILE"; "creative")] #[test_case("DE.-_3"; "with special characters")] fn parse_when_valid(name: &str) { let commodity = Commodity::try_from(name).unwrap(); assert_eq!(commodity.to_string(), name); } #[test_case("0"; "starting with number")] #[test_case("D-"; "ending with dash")] #[test_case("E_"; "ending with underscore")] #[test_case("X."; "ending with dot")] #[test_case("X 3"; "containing space")] #[test_case("X\\0"; "containing backslash")] fn do_not_parse_when_invalid(name: &str) { Commodity::try_from(name).unwrap_err(); } // TODO proptest?