| // Part of the Crubit project, under the Apache License v2.0 with LLVM |
| // Exceptions. See /LICENSE for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| |
| use error_report::{anyhow, ErrorReport, ErrorReporting}; |
| use errors::Errors; |
| use googletest::prelude::*; |
| |
| #[gtest] |
| fn test_errors_consolidate_on_empty_list_returns_ok() -> googletest::Result<()> { |
| let errors = Errors::new(); |
| errors.consolidate().or_fail()?; |
| Ok(()) |
| } |
| |
| #[gtest] |
| fn test_errors_consolidate_on_nonempty_list_returns_reportable_error() -> googletest::Result<()> { |
| let errors = Errors::new(); |
| errors.add(anyhow!("abc")); |
| errors.add(anyhow!("def")); |
| let Err(error) = errors.consolidate() else { |
| return fail!(); |
| }; |
| |
| let report = ErrorReport::new(); |
| report.report(&error.into()); |
| expect_eq!( |
| serde_json::from_str::<serde_json::Value>(&report.to_json_string()).unwrap(), |
| serde_json::json!({ |
| "abc": { "count": 1 }, |
| "def": { "count": 1 }, |
| }), |
| ); |
| Ok(()) |
| } |
| |
| #[gtest] |
| #[should_panic] |
| fn test_errors_drop_with_unconsolidated_errors_panics() { |
| let errors = Errors::new(); |
| errors.add(anyhow!("abc")); |
| } |
| |
| #[gtest] |
| fn consume_error() { |
| // With a non-error result we should get back Some, and no error should be added. |
| { |
| let errors = Errors::new(); |
| expect_eq!(Some(17), errors.consume_error::<u64>(Ok(17))); |
| expect_eq!(Some(()), errors.consolidate().ok()); |
| } |
| |
| // With an error result we should get back None, and the error should be added. |
| { |
| let errors = Errors::new(); |
| expect_eq!(None, errors.consume_error::<u64>(Err(anyhow!("")))); |
| expect_false!(errors.consolidate().is_ok()); |
| } |
| } |