Files
opm-simulators/python/test/pytest_common.py
T
Håkon Hægland c195df978d Refactor: Use factory fixtures for simulator creation in tests
Move simulator instantiation to factory functions that automatically
disable async ECL output. This prevents future contributors from
forgetting the --enable-async-ecl-output=false flag.

- Add create_black_oil_simulator/create_gas_water_simulator to pytest_common
- Define ENABLE_ASYNC_ECL_OUTPUT_FLAG constant
- Update all tests to use factory functions
- No functional changes, pure refactoring
2025-09-23 05:09:20 +02:00

64 lines
2.0 KiB
Python

import os
from contextlib import contextmanager
@contextmanager
def pushd(path):
cwd = os.getcwd()
if not os.path.isdir(path):
os.makedirs(path)
os.chdir(path)
yield
os.chdir(cwd)
ENABLE_ASYNC_ECL_OUTPUT_FLAG = '--enable-async-ecl-output=false'
def create_black_oil_simulator(*args, **kwargs):
"""Create BlackOilSimulator with test-safe default arguments.
Automatically disables async ECL output to prevent race conditions
with pushd context manager in tests.
"""
from opm.simulators import BlackOilSimulator
flag_to_add = ENABLE_ASYNC_ECL_OUTPUT_FLAG
# Handle different constructor patterns
if 'args' in kwargs:
# Add our flag to existing args
if flag_to_add not in kwargs['args']:
kwargs['args'].append(flag_to_add)
elif len(args) >= 4:
# Constructor with deck, state, schedule, summary_config
# Add args parameter
if len(args) == 4:
args = args + ([flag_to_add],)
elif len(args) == 5:
# Args already provided, add our flag
args_list = list(args[4]) if args[4] else []
if flag_to_add not in args_list:
args_list.append(flag_to_add)
args = args[:4] + (args_list,)
else:
# Constructor with filename - add args parameter
kwargs['args'] = kwargs.get('args', [])
if flag_to_add not in kwargs['args']:
kwargs['args'].append(flag_to_add)
return BlackOilSimulator(*args, **kwargs)
def create_gas_water_simulator(*args, **kwargs):
"""Create GasWaterSimulator with test-safe default arguments.
Automatically disables async ECL output to prevent race conditions
with pushd context manager in tests.
"""
from opm.simulators import GasWaterSimulator
flag_to_add = ENABLE_ASYNC_ECL_OUTPUT_FLAG
# Add our flag to args
kwargs['args'] = kwargs.get('args', [])
if flag_to_add not in kwargs['args']:
kwargs['args'].append(flag_to_add)
return GasWaterSimulator(*args, **kwargs)