Update report to use better map data structures

This commit is contained in:
Omar Abdulla
2025-08-24 23:01:30 +03:00
parent 38e3915169
commit 4f55e8968d
5 changed files with 16 additions and 11 deletions
Generated
+1
View File
@@ -4589,6 +4589,7 @@ name = "revive-dt-report"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"indexmap 2.10.0",
"paste", "paste",
"revive-dt-common", "revive-dt-common",
"revive-dt-compiler", "revive-dt-compiler",
+6 -5
View File
@@ -16,6 +16,7 @@ use anyhow::Context;
use clap::Parser; use clap::Parser;
use futures::stream; use futures::stream;
use futures::{Stream, StreamExt}; use futures::{Stream, StreamExt};
use indexmap::IndexMap;
use revive_dt_node_interaction::EthereumNode; use revive_dt_node_interaction::EthereumNode;
use revive_dt_report::{ReportAggregator, Reporter, TestSpecificReporter, TestSpecifier}; use revive_dt_report::{ReportAggregator, Reporter, TestSpecificReporter, TestSpecifier};
use temp_dir::TempDir; use temp_dir::TempDir;
@@ -261,7 +262,7 @@ where
.reporter .reporter
.report_test_ignored_event( .report_test_ignored_event(
"Either the leader or the follower do not support the target desired by the test", "Either the leader or the follower do not support the target desired by the test",
HashMap::from_iter([ IndexMap::from_iter([
( (
"test_desired_targets".to_string(), "test_desired_targets".to_string(),
serde_json::to_value(test.metadata.targets.as_ref()) serde_json::to_value(test.metadata.targets.as_ref())
@@ -295,7 +296,7 @@ where
.reporter .reporter
.report_test_ignored_event( .report_test_ignored_event(
"Metadata file is ignored, therefore all cases are ignored", "Metadata file is ignored, therefore all cases are ignored",
HashMap::new(), IndexMap::new(),
) )
.expect("Can't fail"); .expect("Can't fail");
false false
@@ -315,7 +316,7 @@ where
.reporter .reporter
.report_test_ignored_event( .report_test_ignored_event(
"Case is ignored", "Case is ignored",
HashMap::new(), IndexMap::new(),
) )
.expect("Can't fail"); .expect("Can't fail");
false false
@@ -344,7 +345,7 @@ where
.reporter .reporter
.report_test_ignored_event( .report_test_ignored_event(
"EVM version is incompatible with either the leader or the follower", "EVM version is incompatible with either the leader or the follower",
HashMap::from_iter([ IndexMap::from_iter([
( (
"test_desired_evm_version".to_string(), "test_desired_evm_version".to_string(),
serde_json::to_value(test.metadata.required_evm_version) serde_json::to_value(test.metadata.required_evm_version)
@@ -395,7 +396,7 @@ where
.reporter .reporter
.report_test_ignored_event( .report_test_ignored_event(
"Compilers do not support this mode either for the leader or for the follower.", "Compilers do not support this mode either for the leader or for the follower.",
HashMap::from_iter([ IndexMap::from_iter([
( (
"leader_support".to_string(), "leader_support".to_string(),
serde_json::to_value(leader_support) serde_json::to_value(leader_support)
+1
View File
@@ -15,6 +15,7 @@ revive-dt-compiler = { workspace = true }
anyhow = { workspace = true } anyhow = { workspace = true }
paste = { workspace = true } paste = { workspace = true }
indexmap = { workspace = true, features = ["serde"] }
semver = { workspace = true } semver = { workspace = true }
serde = { workspace = true } serde = { workspace = true }
serde_json = { workspace = true } serde_json = { workspace = true }
+5 -4
View File
@@ -2,12 +2,13 @@
//! reporters and combines them into a single unified report. //! reporters and combines them into a single unified report.
use std::{ use std::{
collections::{BTreeSet, HashMap, HashSet}, collections::{BTreeMap, BTreeSet, HashMap, HashSet},
fs::OpenOptions, fs::OpenOptions,
time::{SystemTime, UNIX_EPOCH}, time::{SystemTime, UNIX_EPOCH},
}; };
use anyhow::Result; use anyhow::Result;
use indexmap::IndexMap;
use revive_dt_compiler::Mode; use revive_dt_compiler::Mode;
use revive_dt_config::Arguments; use revive_dt_config::Arguments;
use revive_dt_format::{case::CaseIdx, corpus::Corpus}; use revive_dt_format::{case::CaseIdx, corpus::Corpus};
@@ -157,9 +158,9 @@ pub struct Report {
/// The list of metadata files that were found by the tool. /// The list of metadata files that were found by the tool.
pub metadata_files: BTreeSet<MetadataFilePath>, pub metadata_files: BTreeSet<MetadataFilePath>,
/// Information relating to each test case. /// Information relating to each test case.
#[serde_as(as = "HashMap<_, HashMap<DisplayFromStr, HashMap<DisplayFromStr, _>>>")] #[serde_as(as = "BTreeMap<_, HashMap<DisplayFromStr, BTreeMap<DisplayFromStr, _>>>")]
pub test_case_information: pub test_case_information:
HashMap<MetadataFilePath, HashMap<Mode, HashMap<CaseIdx, TestCaseReport>>>, BTreeMap<MetadataFilePath, HashMap<Mode, BTreeMap<CaseIdx, TestCaseReport>>>,
} }
impl Report { impl Report {
@@ -188,5 +189,5 @@ pub struct TestCaseIgnoreInformation {
pub reason: String, pub reason: String,
/// Additional fields that describe more information on why the test case is ignored. /// Additional fields that describe more information on why the test case is ignored.
#[serde(flatten)] #[serde(flatten)]
pub additional_fields: HashMap<String, serde_json::Value>, pub additional_fields: IndexMap<String, serde_json::Value>,
} }
+3 -2
View File
@@ -1,8 +1,9 @@
//! The types associated with the events sent by the runner to the reporter. //! The types associated with the events sent by the runner to the reporter.
#![allow(dead_code)] #![allow(dead_code)]
use std::{collections::HashMap, sync::Arc}; use std::sync::Arc;
use indexmap::IndexMap;
use revive_dt_format::corpus::Corpus; use revive_dt_format::corpus::Corpus;
use revive_dt_format::metadata::Metadata; use revive_dt_format::metadata::Metadata;
use tokio::sync::{broadcast, oneshot}; use tokio::sync::{broadcast, oneshot};
@@ -264,7 +265,7 @@ define_event! {
/// A reason for the test to be ignored. /// A reason for the test to be ignored.
reason: String, reason: String,
/// Additional fields that describe more information on why the test was ignored. /// Additional fields that describe more information on why the test was ignored.
additional_fields: HashMap<String, serde_json::Value> additional_fields: IndexMap<String, serde_json::Value>
}, },
} }
} }