Compare commits

..

1 Commits

Author SHA1 Message Date
James Wilson ce3aaf1888 Allow the corpus to point to a single file 2025-07-28 15:51:55 +01:00
2 changed files with 13 additions and 34 deletions
+1 -1
View File
@@ -8,7 +8,7 @@ authors = ["Parity Technologies <admin@parity.io>"]
license = "MIT/Apache-2.0"
edition = "2024"
repository = "https://github.com/paritytech/revive-differential-testing.git"
rust-version = "1.85.0"
rust-version = "1.88.0"
[workspace.dependencies]
revive-dt-common = { version = "0.1.0", path = "crates/common" }
+12 -33
View File
@@ -17,25 +17,7 @@ impl Corpus {
/// Try to read and parse the corpus definition file at given `path`.
pub fn try_from_path(path: &Path) -> anyhow::Result<Self> {
let file = File::open(path)?;
let mut corpus: Corpus = serde_json::from_reader(file)?;
// Ensure that the path mentioned in the corpus is relative to the corpus file.
// Canonicalizing also helps make the path in any errors unambiguous.
corpus.path = path
.parent()
.ok_or_else(|| {
anyhow::anyhow!("Corpus path '{}' does not point to a file", path.display())
})?
.canonicalize()
.map_err(|error| {
anyhow::anyhow!(
"Failed to canonicalize path to corpus '{}': {error}",
path.display()
)
})?
.join(corpus.path);
Ok(corpus)
Ok(serde_json::from_reader(file)?)
}
/// Scan the corpus base directory and return all tests found.
@@ -46,13 +28,19 @@ impl Corpus {
}
}
/// Recursively walks `path` and parses any JSON or Solidity file into a test
/// definition [Metadata].
/// If `path` is a file, try to parse it directly into a [MetadataFile].
/// Else, recursively walk through the `path` directory and parse any
/// JSON or Solidity file into a test definition [MetadataFile].
///
/// Found tests are inserted into `tests`.
///
/// `path` is expected to be a directory.
pub fn collect_metadata(path: &Path, tests: &mut Vec<MetadataFile>) {
if path.is_file()
&& let Some(metadata) = MetadataFile::try_from_file(&path)
{
tests.push(metadata);
return;
}
let dir_entry = match std::fs::read_dir(path) {
Ok(dir_entry) => dir_entry,
Err(error) => {
@@ -71,15 +59,6 @@ pub fn collect_metadata(path: &Path, tests: &mut Vec<MetadataFile>) {
};
let path = entry.path();
if path.is_dir() {
collect_metadata(&path, tests);
continue;
}
if path.is_file() {
if let Some(metadata) = MetadataFile::try_from_file(&path) {
tests.push(metadata)
}
}
collect_metadata(&path, tests);
}
}