Skip to content

Commit 19bf45b

Browse files
committed
fix: honor CI override in test-env guard and e2e workflow (fixes #1211)
1 parent f232ac4 commit 19bf45b

File tree

4 files changed

+56
-1
lines changed

4 files changed

+56
-1
lines changed

.github/workflows/e2e_pycobertura.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ jobs:
1010
name: Compare FortCov vs Cobertura (gcovr)
1111
runs-on: ubuntu-latest
1212
timeout-minutes: 10
13+
env:
14+
FORTCOV_ALLOW_AUTOTEST: "1"
1315

1416
steps:
1517
- name: Checkout repository

fpm.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,8 @@ main = "main.f90"
2626
name = "cli_flags_rejection_minimal"
2727
source-dir = "test"
2828
main = "test_cli_flags_rejection_minimal.f90"
29+
30+
[[test]]
31+
name = "test_env_guard_override"
32+
source-dir = "test"
33+
main = "test_test_env_guard_override.f90"

src/utils/runtime/test_env_guard.f90

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@ function running_under_test_env() result(is_test_env)
1818

1919
is_test_env = .false.
2020

21+
! Allow explicit override to enable auto-test/bridge in controlled environments
22+
call get_environment_variable('FORTCOV_ALLOW_AUTOTEST', env_value, status=status)
23+
if (status == 0 .and. len_trim(env_value) > 0) then
24+
is_test_env = .false.
25+
return
26+
end if
27+
2128
call get_environment_variable('FPM_TEST', env_value, status=status)
2229
if (status == 0 .and. len_trim(env_value) > 0) then
2330
is_test_env = .true.
@@ -50,4 +57,3 @@ function running_under_test_env() result(is_test_env)
5057
end function running_under_test_env
5158

5259
end module test_env_guard
53-
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
program test_test_env_guard_override
2+
use iso_fortran_env, only: error_unit
3+
use iso_c_binding, only: c_int, c_char
4+
use test_env_guard, only: running_under_test_env
5+
implicit none
6+
7+
interface
8+
function c_setenv(name, value, overwrite) bind(C, name="setenv") result(ret)
9+
import :: c_int, c_char
10+
character(kind=c_char), dimension(*) :: name
11+
character(kind=c_char), dimension(*) :: value
12+
integer(c_int), value :: overwrite
13+
integer(c_int) :: ret
14+
end function c_setenv
15+
end interface
16+
17+
logical :: is_test
18+
19+
if (c_setenv('FORTCOV_TEST_MODE' // char(0), '1' // char(0), 1_c_int) /= 0_c_int) then
20+
write(error_unit, '(A)') 'Failed to set FORTCOV_TEST_MODE'
21+
stop 1
22+
end if
23+
24+
is_test = running_under_test_env()
25+
if (.not. is_test) then
26+
write(error_unit, '(A)') 'Expected test environment detection to be TRUE'
27+
stop 2
28+
end if
29+
30+
if (c_setenv('FORTCOV_ALLOW_AUTOTEST' // char(0), '1' // char(0), 1_c_int) /= 0_c_int) then
31+
write(error_unit, '(A)') 'Failed to set FORTCOV_ALLOW_AUTOTEST'
32+
stop 3
33+
end if
34+
35+
is_test = running_under_test_env()
36+
if (is_test) then
37+
write(error_unit, '(A)') 'Override did not bypass test environment guard'
38+
stop 4
39+
end if
40+
41+
print *, 'OK: test_env_guard override bypasses test detection when enabled'
42+
end program test_test_env_guard_override

0 commit comments

Comments
 (0)