From 1115999c4bc27800e13acc30899ebf6c2f22dd89 Mon Sep 17 00:00:00 2001 From: ksew1 Date: Sun, 2 Mar 2025 22:33:03 +0100 Subject: [PATCH] Run tests for different scarb versions commit-id:17b293b6 --- .github/workflows/ci.yml | 21 +++++++++++++++++-- .tool-versions | 2 +- CHANGELOG.md | 3 +++ Cargo.lock | 1 + Cargo.toml | 1 + .../src/build/statement_information.rs | 3 ++- crates/cairo-coverage/Cargo.toml | 4 ++++ crates/cairo-coverage/src/commands/run.rs | 18 ++++++++++------ .../tests/data/complex_calculator/Scarb.toml | 2 +- .../tests/data/coverage_ignore/Scarb.toml | 2 +- .../tests/data/macros/Scarb.toml | 2 +- .../tests/data/readme_example/Scarb.toml | 2 +- .../tests/data/scarb_template/Scarb.toml | 2 +- .../tests/data/simple/Scarb.toml | 2 +- .../tests/data/snforge_template/Scarb.toml | 2 +- crates/cairo-coverage/tests/e2e/general.rs | 3 +++ .../tests/helpers/test_project.rs | 2 ++ 17 files changed, 55 insertions(+), 17 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3facc52..dc274a5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,8 +7,8 @@ on: - main jobs: - tests: - name: Tests + test-disabling-macros: + name: Tests (2.8.5) - support for disabling macros runs-on: ${{ matrix.os }} strategy: matrix: @@ -20,6 +20,23 @@ jobs: - uses: hrishikesh-kadam/setup-lcov@6c1aa0cc9e1c02f9f58f01ac599f1064ccc83470 # v1.1.0 - uses: software-mansion/setup-scarb@22f50f68eb6ffacfc173786dab19aa7d49b43441 # v1.5.0 - uses: foundry-rs/setup-snfoundry@ee00ea3f026379008ca40a54448d4059233d06cc # v4.0.0 + - run: cargo test --release --features allows-excluding-macros + + test: + name: Tests + runs-on: ubuntu-latest + strategy: + matrix: + version: [2.9.1, 2.10.1] + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - uses: Swatinem/rust-cache@f0deed1e0edfc6a9be95417288c0e1099b1eeec3 # v2.7.7 + - uses: hrishikesh-kadam/setup-lcov@6c1aa0cc9e1c02f9f58f01ac599f1064ccc83470 # v1.1.0 + - uses: software-mansion/setup-scarb@22f50f68eb6ffacfc173786dab19aa7d49b43441 # v1.5.0 + with: + scarb-version: ${{ matrix.version }} + - uses: foundry-rs/setup-snfoundry@ee00ea3f026379008ca40a54448d4059233d06cc # v4.0.0 - run: cargo test --release rustfmt: diff --git a/.tool-versions b/.tool-versions index 05467a0..dc088ae 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ -starknet-foundry 0.37.0 +starknet-foundry 0.38.0 scarb 2.8.5 diff --git a/CHANGELOG.md b/CHANGELOG.md index 389b277..4b1846d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +#### Added +- warning if the current scarb version doesn't support not including macros in the coverage report + #### Changed - macros are now by default included in the coverage report. If you want to exclude them, use the `--include` without the `macros` option (can also have empty value) diff --git a/Cargo.lock b/Cargo.lock index 7cd6c49..0ff7a6d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -227,6 +227,7 @@ dependencies = [ "clap", "console", "scarb-metadata", + "semver", "snapbox", "walkdir", "which", diff --git a/Cargo.toml b/Cargo.toml index 6b04242..13e1fed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,6 +28,7 @@ serde = "1.0.218" serde_json = "1.0.139" scarb-metadata = "1.13.0" snapbox = "0.6.21" +semver = "1.0.25" indoc = "2.0.5" regex = "1.11.1" rayon = "1.10.0" diff --git a/crates/cairo-coverage-core/src/build/statement_information.rs b/crates/cairo-coverage-core/src/build/statement_information.rs index 20bfc4e..7ea4dd3 100644 --- a/crates/cairo-coverage-core/src/build/statement_information.rs +++ b/crates/cairo-coverage-core/src/build/statement_information.rs @@ -59,7 +59,8 @@ impl IntoIterator for &LineRange { type IntoIter = iter::Map, fn(usize) -> LineNumber>; fn into_iter(self) -> Self::IntoIter { - (self.start.0..=self.end.0).map(LineNumber) + // FIXME: Use the whole range instead of the start once we drop support for scarb 2.8.* + (self.start.0..=self.start.0).map(LineNumber) } } diff --git a/crates/cairo-coverage/Cargo.toml b/crates/cairo-coverage/Cargo.toml index b4192e2..9552271 100644 --- a/crates/cairo-coverage/Cargo.toml +++ b/crates/cairo-coverage/Cargo.toml @@ -9,6 +9,7 @@ console.workspace = true camino.workspace = true anyhow.workspace = true scarb-metadata.workspace = true +semver.workspace = true clap.workspace = true walkdir.workspace = true @@ -18,3 +19,6 @@ cairo-coverage-test-utils = { path = "../cairo-coverage-test-utils" } assert_fs.workspace = true snapbox.workspace = true which.workspace = true + +[features] +allows-excluding-macros = [] diff --git a/crates/cairo-coverage/src/commands/run.rs b/crates/cairo-coverage/src/commands/run.rs index a3ee9e9..f1ec96c 100644 --- a/crates/cairo-coverage/src/commands/run.rs +++ b/crates/cairo-coverage/src/commands/run.rs @@ -1,7 +1,8 @@ use crate::args::run::{IncludedComponent, RunArgs}; -use anyhow::{Context, Result}; +use anyhow::{Context, Result, ensure}; use cairo_coverage_core::args::{IncludedComponent as CoreIncludedComponent, RunOptions}; use scarb_metadata::{Metadata, MetadataCommand}; +use semver::Version; use std::fs::OpenOptions; use std::io::Write; @@ -16,11 +17,16 @@ pub fn run( no_truncation, }: RunArgs, ) -> Result<()> { - let project_path = if let Some(project_path) = project_path { - project_path - } else { - scarb_metadata()?.workspace.root - }; + let metadata = scarb_metadata()?; + + if !include.contains(&IncludedComponent::Macros) { + ensure!( + metadata.app_version_info.version <= Version::new(2, 8, 5), + "excluding macros is only supported for Scarb versions <= 2.8.5" + ); + } + + let project_path = project_path.unwrap_or(metadata.workspace.root); let options = RunOptions { include: include.into_iter().map(Into::into).collect(), diff --git a/crates/cairo-coverage/tests/data/complex_calculator/Scarb.toml b/crates/cairo-coverage/tests/data/complex_calculator/Scarb.toml index b07d563..fb59537 100644 --- a/crates/cairo-coverage/tests/data/complex_calculator/Scarb.toml +++ b/crates/cairo-coverage/tests/data/complex_calculator/Scarb.toml @@ -7,7 +7,7 @@ edition = "2024_07" starknet = ">=2.8.0" [dev-dependencies] -snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.37.0" } +snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.38.0" } [profile.dev.cairo] unstable-add-statements-functions-debug-info = true diff --git a/crates/cairo-coverage/tests/data/coverage_ignore/Scarb.toml b/crates/cairo-coverage/tests/data/coverage_ignore/Scarb.toml index 5baf46f..41bb228 100644 --- a/crates/cairo-coverage/tests/data/coverage_ignore/Scarb.toml +++ b/crates/cairo-coverage/tests/data/coverage_ignore/Scarb.toml @@ -7,7 +7,7 @@ edition = "2024_07" starknet = ">=2.8.0" [dev-dependencies] -snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.37.0" } +snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.38.0" } [profile.dev.cairo] unstable-add-statements-functions-debug-info = true diff --git a/crates/cairo-coverage/tests/data/macros/Scarb.toml b/crates/cairo-coverage/tests/data/macros/Scarb.toml index a53fc3d..e51066b 100644 --- a/crates/cairo-coverage/tests/data/macros/Scarb.toml +++ b/crates/cairo-coverage/tests/data/macros/Scarb.toml @@ -7,7 +7,7 @@ edition = "2024_07" starknet = ">=2.8.0" [dev-dependencies] -snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.37.0" } +snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.38.0" } [profile.dev.cairo] unstable-add-statements-functions-debug-info = true diff --git a/crates/cairo-coverage/tests/data/readme_example/Scarb.toml b/crates/cairo-coverage/tests/data/readme_example/Scarb.toml index 025fc71..239c89a 100644 --- a/crates/cairo-coverage/tests/data/readme_example/Scarb.toml +++ b/crates/cairo-coverage/tests/data/readme_example/Scarb.toml @@ -7,7 +7,7 @@ edition = "2024_07" starknet = ">=2.8.0" [dev-dependencies] -snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.37.0" } +snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.38.0" } [profile.dev.cairo] unstable-add-statements-functions-debug-info = true diff --git a/crates/cairo-coverage/tests/data/scarb_template/Scarb.toml b/crates/cairo-coverage/tests/data/scarb_template/Scarb.toml index da8129f..89d41fd 100644 --- a/crates/cairo-coverage/tests/data/scarb_template/Scarb.toml +++ b/crates/cairo-coverage/tests/data/scarb_template/Scarb.toml @@ -7,7 +7,7 @@ edition = "2024_07" starknet = ">=2.8.0" [dev-dependencies] -snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.37.0" } +snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.38.0" } [profile.dev.cairo] unstable-add-statements-functions-debug-info = true diff --git a/crates/cairo-coverage/tests/data/simple/Scarb.toml b/crates/cairo-coverage/tests/data/simple/Scarb.toml index 3a85000..55aba25 100644 --- a/crates/cairo-coverage/tests/data/simple/Scarb.toml +++ b/crates/cairo-coverage/tests/data/simple/Scarb.toml @@ -7,7 +7,7 @@ edition = "2024_07" starknet = ">=2.8.0" [dev-dependencies] -snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.37.0" } +snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.38.0" } [profile.dev.cairo] unstable-add-statements-functions-debug-info = true diff --git a/crates/cairo-coverage/tests/data/snforge_template/Scarb.toml b/crates/cairo-coverage/tests/data/snforge_template/Scarb.toml index 23e5d6e..89a5102 100644 --- a/crates/cairo-coverage/tests/data/snforge_template/Scarb.toml +++ b/crates/cairo-coverage/tests/data/snforge_template/Scarb.toml @@ -7,7 +7,7 @@ edition = "2023_11" starknet = ">=2.8.0" [dev-dependencies] -snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.37.0" } +snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.38.0" } [[target.starknet-contract]] sierra = true diff --git a/crates/cairo-coverage/tests/e2e/general.rs b/crates/cairo-coverage/tests/e2e/general.rs index 2caee2f..0d7753a 100644 --- a/crates/cairo-coverage/tests/e2e/general.rs +++ b/crates/cairo-coverage/tests/e2e/general.rs @@ -9,6 +9,7 @@ fn simple() { } #[test] +#[cfg(feature = "allows-excluding-macros")] fn simple_with_tests() { TestProject::new("simple") .coverage_args(&["--include", "test-functions"]) @@ -59,6 +60,7 @@ fn macros() { } #[test] +#[cfg(feature = "allows-excluding-macros")] fn macros_not_included() { TestProject::new("macros") .coverage_args(&["--include"]) @@ -74,6 +76,7 @@ fn snforge_template() { } #[test] +#[cfg(feature = "allows-excluding-macros")] fn snforge_template_macros_not_included() { TestProject::new("snforge_template") .coverage_args(&["--include"]) diff --git a/crates/cairo-coverage/tests/helpers/test_project.rs b/crates/cairo-coverage/tests/helpers/test_project.rs index 33a5f06..b2cc9ca 100644 --- a/crates/cairo-coverage/tests/helpers/test_project.rs +++ b/crates/cairo-coverage/tests/helpers/test_project.rs @@ -39,6 +39,7 @@ impl TestProject { .output() } + #[cfg(feature = "allows-excluding-macros")] pub fn run_without_genhtml(self) -> TestProjectOutput { self.generate_trace_files().run_coverage().output() } @@ -130,6 +131,7 @@ impl TestProjectOutput { assert_eq!(content, expected); } + #[cfg(feature = "allows-excluding-macros")] pub fn assert_empty_output(self) { assert!(self.read_output().is_empty()); }