summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/coverage.yml27
-rw-r--r--dhall/build.rs4
-rw-r--r--dhall/src/tests.rs24
3 files changed, 40 insertions, 15 deletions
diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
index 946113a..ba49b7f 100644
--- a/.github/workflows/coverage.yml
+++ b/.github/workflows/coverage.yml
@@ -5,8 +5,8 @@ on:
branches: [ master ]
jobs:
- coverage:
- name: Gather coverage data
+ grcov:
+ name: Gather coverage data with grcov
runs-on: ubuntu-latest
steps:
- name: Checkout branch
@@ -17,11 +17,26 @@ jobs:
uses: actions-rs/toolchain@v1
with:
profile: minimal
- - name: Run tests with tarpaulin
- uses: actions-rs/tarpaulin@v0.1
+ # toolchain: nightly
+ toolchain: nightly-2020-03-12 # latest nightly makes `quote` crash with -Zno-landing-pads
+ override: true
+ - name: Ensure workspace is clean
+ uses: actions-rs/cargo@v1
with:
- args: '--all --exclude-files abnf_to_pest/* --exclude-files dhall_proc_macros/*'
+ command: clean
+ - name: Run tests with -Zprofile
+ uses: actions-rs/cargo@v1
+ with:
+ command: test
+ env:
+ CI_GRCOV: '1' # Tell the test harness to increase stack size
+ CARGO_INCREMENTAL: '0'
+ RUSTFLAGS: '-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Zno-landing-pads'
+ - name: Run grcov
+ id: grcov
+ uses: actions-rs/grcov@v0.1
- name: Upload coverage data to codecov.io
- uses: codecov/codecov-action@v1.0.2
+ uses: codecov/codecov-action@v1
with:
token: ${{secrets.CODECOV_TOKEN}}
+ file: ${{steps.grcov.outputs.report}}
diff --git a/dhall/build.rs b/dhall/build.rs
index fb3f9ee..19abcc4 100644
--- a/dhall/build.rs
+++ b/dhall/build.rs
@@ -333,7 +333,7 @@ fn generate_tests() -> std::io::Result<()> {
|| path == "unit/MergeHandlerFreeVar"
}),
output_type: Some(FileType::UI),
- ..default_feature.clone()
+ ..default_feature
},
];
@@ -450,7 +450,7 @@ fn convert_abnf_to_pest() -> std::io::Result<()> {
Ok(())
}
-// Generate pest parser manually becaue otherwise we'd need to modify something outside of
+// Generate pest parser manually because otherwise we'd need to modify something outside of
// OUT_DIR and that's forbidden by docs.rs.
fn generate_pest_parser() -> std::io::Result<()> {
let out_dir = env::var("OUT_DIR").unwrap();
diff --git a/dhall/src/tests.rs b/dhall/src/tests.rs
index d305b98..a5a278c 100644
--- a/dhall/src/tests.rs
+++ b/dhall/src/tests.rs
@@ -235,9 +235,22 @@ impl TestFile {
}
#[allow(dead_code)]
-fn run_test_stringy_error(test: Test) -> std::result::Result<(), String> {
- run_test(test).map_err(|e| e.to_string())?;
- Ok(())
+fn run_test_or_panic(test: Test) {
+ let res = if env::var("CI_GRCOV").is_ok() {
+ // Augment stack size when running with 0 inlining to avoid overflows
+ std::thread::Builder::new()
+ .stack_size(128 * 1024 * 1024)
+ .spawn(|| run_test(test))
+ .unwrap()
+ .join()
+ .unwrap()
+ } else {
+ run_test(test)
+ };
+ match res {
+ Ok(_) => {}
+ Err(e) => panic!(e.to_string()),
+ }
}
fn run_test(test: Test) -> Result<()> {
@@ -322,10 +335,7 @@ mod spec {
fn $name() {
use crate::tests::Test::*;
use crate::tests::*;
- match run_test_stringy_error($type) {
- Ok(_) => {}
- Err(s) => panic!(s),
- }
+ run_test_or_panic($type);
}
};
}