summaryrefslogtreecommitdiff
path: root/subprojects/thiserror/tests/test_expr.rs
diff options
context:
space:
mode:
authorJohn Turner <jturner.usa@gmail.com>2025-12-21 04:20:53 +0000
committerJohn Turner <jturner.usa@gmail.com>2025-12-22 08:05:20 +0000
commit96708614ba46c42f87b23f2a957c510499d8811e (patch)
tree372dcf90f1a6fdf1b90f5d006ce7a32717f47166 /subprojects/thiserror/tests/test_expr.rs
parent0ec856797256b5d9807929e1b32c03756eb43124 (diff)
downloadgentoo-utils-feature/port-to-meson-cargo.tar.gz
Use the new unstable meson cargo support. This simplifies the meson.build script and allows to use crates such as clap that require picking up features from Cargo.toml. This also allows us to not embed thiserror in subprojects, and instead use a wrap file with a custom meson.build and some patches to make it compile without running its build.rs script.
Diffstat (limited to 'subprojects/thiserror/tests/test_expr.rs')
-rw-r--r--subprojects/thiserror/tests/test_expr.rs118
1 files changed, 0 insertions, 118 deletions
diff --git a/subprojects/thiserror/tests/test_expr.rs b/subprojects/thiserror/tests/test_expr.rs
deleted file mode 100644
index 1872fb5..0000000
--- a/subprojects/thiserror/tests/test_expr.rs
+++ /dev/null
@@ -1,118 +0,0 @@
-#![allow(clippy::iter_cloned_collect, clippy::uninlined_format_args)]
-
-use core::fmt::Display;
-#[cfg(feature = "std")]
-use std::path::PathBuf;
-use thiserror::Error;
-
-// Some of the elaborate cases from the rcc codebase, which is a C compiler in
-// Rust. https://github.com/jyn514/rcc/blob/0.8.0/src/data/error.rs
-#[derive(Error, Debug)]
-pub enum CompilerError {
- #[error("cannot shift {} by {maximum} or more bits (got {current})", if *.is_left { "left" } else { "right" })]
- TooManyShiftBits {
- is_left: bool,
- maximum: u64,
- current: u64,
- },
-
- #[error("#error {}", (.0).iter().copied().collect::<Vec<_>>().join(" "))]
- User(Vec<&'static str>),
-
- #[error("overflow while parsing {}integer literal",
- if let Some(signed) = .is_signed {
- if *signed { "signed "} else { "unsigned "}
- } else {
- ""
- }
- )]
- IntegerOverflow { is_signed: Option<bool> },
-
- #[error("overflow while parsing {}integer literal", match .is_signed {
- Some(true) => "signed ",
- Some(false) => "unsigned ",
- None => "",
- })]
- IntegerOverflow2 { is_signed: Option<bool> },
-}
-
-// Examples drawn from Rustup.
-#[derive(Error, Debug)]
-pub enum RustupError {
- #[error(
- "toolchain '{name}' does not contain component {component}{}",
- .suggestion
- .as_ref()
- .map_or_else(String::new, |s| format!("; did you mean '{}'?", s)),
- )]
- UnknownComponent {
- name: String,
- component: String,
- suggestion: Option<String>,
- },
-}
-
-#[track_caller]
-fn assert<T: Display>(expected: &str, value: T) {
- assert_eq!(expected, value.to_string());
-}
-
-#[test]
-fn test_rcc() {
- assert(
- "cannot shift left by 32 or more bits (got 50)",
- CompilerError::TooManyShiftBits {
- is_left: true,
- maximum: 32,
- current: 50,
- },
- );
-
- assert("#error A B C", CompilerError::User(vec!["A", "B", "C"]));
-
- assert(
- "overflow while parsing signed integer literal",
- CompilerError::IntegerOverflow {
- is_signed: Some(true),
- },
- );
-}
-
-#[test]
-fn test_rustup() {
- assert(
- "toolchain 'nightly' does not contain component clipy; did you mean 'clippy'?",
- RustupError::UnknownComponent {
- name: "nightly".to_owned(),
- component: "clipy".to_owned(),
- suggestion: Some("clippy".to_owned()),
- },
- );
-}
-
-// Regression test for https://github.com/dtolnay/thiserror/issues/335
-#[cfg(feature = "std")]
-#[test]
-#[allow(non_snake_case)]
-fn test_assoc_type_equality_constraint() {
- pub trait Trait<T>: Display {
- type A;
- }
-
- impl<T> Trait<T> for i32 {
- type A = i32;
- }
-
- #[derive(Error, Debug)]
- #[error("{A} {b}", b = &0 as &dyn Trait<i32, A = i32>)]
- pub struct Error {
- pub A: PathBuf,
- }
-
- assert(
- "... 0",
- Error {
- A: PathBuf::from("..."),
- },
- );
-}