From 9eff9400458cfcdd65bab69bd4ebbf69a152b1ab Mon Sep 17 00:00:00 2001 From: Adam Reichold Date: Sun, 21 May 2023 12:25:25 +0200 Subject: [PATCH] Simplify version handling of UI tests. Due to checking in error outputs these tests only work reliably on stable and not on intermediate version between our MSRV (currently 1.48) and the current stable version. Hence this simplifies things to run only MSRV-compatible tests for the MSRV builds, anything else for stable builds except for those tests which require the nightly feature, i.e. the `Ungil` being distinct from the `Send` trait. Finally, `not_send3` is disabled when using the nightly feature since while `Rc` is not send, it also not GIL-bound and hence can be passed into `allow_threads` as it does not actually spawn a new thread. --- .github/workflows/build.yml | 4 ++ tests/test_compile_error.rs | 100 +++++------------------------------- 2 files changed, 18 insertions(+), 86 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6b052e2eb5a..1c67128a677 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -59,6 +59,10 @@ jobs: name: Prepare minimal package versions (MSRV only) run: nox -s set-minimal-package-versions + - if: inputs.rust == 'nightly' + name: Ignore changed error messages when using trybuild + run: echo "TRYBUILD=overwrite" >> "$GITHUB_ENV" + - name: Build docs run: cargo doc --no-deps --no-default-features --features "full ${{ inputs.extra-features }}" diff --git a/tests/test_compile_error.rs b/tests/test_compile_error.rs index ffef87ee2fe..e107ab5517f 100644 --- a/tests/test_compile_error.rs +++ b/tests/test_compile_error.rs @@ -1,35 +1,8 @@ #![cfg(feature = "macros")] -#[rustversion::not(nightly)] #[cfg(not(target_arch = "wasm32"))] // Not possible to invoke compiler from wasm #[test] fn test_compile_errors() { - // stable - require all tests to pass - _test_compile_errors() -} - -#[cfg(not(feature = "nightly"))] -#[cfg(not(target_arch = "wasm32"))] // We are building wasm Python with pthreads disabled -#[rustversion::nightly] -#[test] -fn test_compile_errors() { - // nightly - don't care if test output is potentially wrong, to avoid churn in PyO3's CI thanks - // to diagnostics changing on nightly. - let _ = std::panic::catch_unwind(_test_compile_errors); -} - -#[cfg(feature = "nightly")] -#[cfg(not(target_arch = "wasm32"))] // Not possible to invoke compiler from wasm -#[rustversion::nightly] -#[test] -fn test_compile_errors() { - // nightly - don't care if test output is potentially wrong, to avoid churn in PyO3's CI thanks - // to diagnostics changing on nightly. - _test_compile_errors() -} - -#[cfg(not(feature = "nightly"))] -fn _test_compile_errors() { let t = trybuild::TestCases::new(); t.compile_fail("tests/ui/invalid_macro_args.rs"); @@ -46,89 +19,44 @@ fn _test_compile_errors() { t.compile_fail("tests/ui/invalid_pymodule_args.rs"); t.compile_fail("tests/ui/reject_generics.rs"); - tests_rust_1_49(&t); - tests_rust_1_56(&t); - tests_rust_1_57(&t); - tests_rust_1_58(&t); - tests_rust_1_60(&t); - tests_rust_1_62(&t); - tests_rust_1_63(&t); + tests_not_msrv(&t); + tests_nightly(&t); #[rustversion::since(1.49)] - fn tests_rust_1_49(t: &trybuild::TestCases) { + fn tests_not_msrv(t: &trybuild::TestCases) { t.compile_fail("tests/ui/deprecations.rs"); - } - #[rustversion::before(1.49)] - fn tests_rust_1_49(_t: &trybuild::TestCases) {} - - #[rustversion::since(1.56)] - fn tests_rust_1_56(t: &trybuild::TestCases) { t.compile_fail("tests/ui/invalid_closure.rs"); - t.compile_fail("tests/ui/pyclass_send.rs"); - } - - #[rustversion::before(1.56)] - fn tests_rust_1_56(_t: &trybuild::TestCases) {} - - #[rustversion::since(1.57)] - fn tests_rust_1_57(t: &trybuild::TestCases) { t.compile_fail("tests/ui/invalid_argument_attributes.rs"); t.compile_fail("tests/ui/invalid_frompy_derive.rs"); t.compile_fail("tests/ui/static_ref.rs"); t.compile_fail("tests/ui/wrong_aspyref_lifetimes.rs"); - } - - #[rustversion::before(1.57)] - fn tests_rust_1_57(_t: &trybuild::TestCases) {} - - #[rustversion::since(1.58)] - fn tests_rust_1_58(t: &trybuild::TestCases) { t.compile_fail("tests/ui/invalid_pyfunctions.rs"); t.compile_fail("tests/ui/invalid_pymethods.rs"); #[cfg(Py_LIMITED_API)] t.compile_fail("tests/ui/abi3_nativetype_inheritance.rs"); - } - - #[rustversion::before(1.58)] - fn tests_rust_1_58(_t: &trybuild::TestCases) {} - - #[rustversion::since(1.60)] - fn tests_rust_1_60(t: &trybuild::TestCases) { t.compile_fail("tests/ui/invalid_intern_arg.rs"); t.compile_fail("tests/ui/invalid_frozen_pyclass_borrow.rs"); - } - - #[rustversion::before(1.60)] - fn tests_rust_1_60(_t: &trybuild::TestCases) {} - - #[rustversion::since(1.62)] - fn tests_rust_1_62(t: &trybuild::TestCases) { t.compile_fail("tests/ui/invalid_pymethod_receiver.rs"); t.compile_fail("tests/ui/missing_intopy.rs"); - } - - #[rustversion::before(1.62)] - fn tests_rust_1_62(_t: &trybuild::TestCases) {} - - #[rustversion::since(1.63)] - fn tests_rust_1_63(t: &trybuild::TestCases) { t.compile_fail("tests/ui/invalid_result_conversion.rs"); t.compile_fail("tests/ui/not_send.rs"); t.compile_fail("tests/ui/not_send2.rs"); + #[cfg(not(feature = "nightly"))] t.compile_fail("tests/ui/not_send3.rs"); t.compile_fail("tests/ui/get_set_all.rs"); } - #[rustversion::before(1.63)] - fn tests_rust_1_63(_t: &trybuild::TestCases) {} -} + #[rustversion::before(1.49)] + fn tests_not_msrv(_t: &trybuild::TestCases) {} -#[cfg(feature = "nightly")] -fn _test_compile_errors() { - let t = trybuild::TestCases::new(); + #[cfg(feature = "nightly")] + fn tests_nightly(t: &trybuild::TestCases) { + t.compile_fail("tests/ui/not_send_auto_trait.rs"); + t.compile_fail("tests/ui/not_send_auto_trait2.rs"); + t.compile_fail("tests/ui/send_wrapper.rs"); + } - t.compile_fail("tests/ui/not_send_auto_trait.rs"); - t.compile_fail("tests/ui/not_send_auto_trait2.rs"); - t.compile_fail("tests/ui/send_wrapper.rs"); + #[cfg(not(feature = "nightly"))] + fn tests_nightly(_t: &trybuild::TestCases) {} }