2019-06-04 20:35:30 +02:00
|
|
|
import sys
|
|
|
|
|
import os
|
|
|
|
|
import pytest
|
2019-09-23 11:50:33 +02:00
|
|
|
import tempfile
|
2019-06-04 20:35:30 +02:00
|
|
|
|
2021-01-26 20:48:01 +01:00
|
|
|
sys.path.insert(1, os.path.join(sys.path[0], "../../"))
|
2019-06-04 20:35:30 +02:00
|
|
|
import rips
|
|
|
|
|
|
|
|
|
|
import dataroot
|
|
|
|
|
|
2020-04-16 16:06:18 +02:00
|
|
|
|
2019-09-19 13:25:04 +02:00
|
|
|
def test_10kAsync(rips_instance, initialize_test):
|
2019-06-04 20:35:30 +02:00
|
|
|
casePath = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
|
2019-09-19 13:25:04 +02:00
|
|
|
case = rips_instance.project.load_case(path=casePath)
|
2019-06-04 20:35:30 +02:00
|
|
|
|
2026-05-11 08:52:33 +02:00
|
|
|
resultChunks = case.active_cell_property_async(
|
|
|
|
|
rips.PropertyType.DYNAMIC_NATIVE, "SOIL", 1
|
|
|
|
|
)
|
2019-06-04 20:35:30 +02:00
|
|
|
mysum = 0.0
|
|
|
|
|
count = 0
|
|
|
|
|
for chunk in resultChunks:
|
|
|
|
|
mysum += sum(chunk.values)
|
|
|
|
|
count += len(chunk.values)
|
|
|
|
|
average = mysum / count
|
2021-01-26 20:48:01 +01:00
|
|
|
assert mysum == pytest.approx(621.768, abs=0.001)
|
|
|
|
|
assert average != pytest.approx(0.0158893, abs=0.0000001)
|
|
|
|
|
assert average == pytest.approx(0.0558893, abs=0.0000001)
|
2019-06-06 13:29:47 +02:00
|
|
|
|
2020-04-16 16:06:18 +02:00
|
|
|
|
2019-09-19 13:25:04 +02:00
|
|
|
def test_10kSync(rips_instance, initialize_test):
|
2019-08-07 23:33:08 +02:00
|
|
|
casePath = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
|
2019-09-19 13:25:04 +02:00
|
|
|
case = rips_instance.project.load_case(path=casePath)
|
2019-08-07 23:33:08 +02:00
|
|
|
|
2026-05-11 08:52:33 +02:00
|
|
|
results = case.active_cell_property(rips.PropertyType.DYNAMIC_NATIVE, "SOIL", 1)
|
2019-08-07 23:33:08 +02:00
|
|
|
mysum = sum(results)
|
|
|
|
|
average = mysum / len(results)
|
2021-01-26 20:48:01 +01:00
|
|
|
assert mysum == pytest.approx(621.768, abs=0.001)
|
|
|
|
|
assert average != pytest.approx(0.0158893, abs=0.0000001)
|
|
|
|
|
assert average == pytest.approx(0.0558893, abs=0.0000001)
|
2019-06-06 13:29:47 +02:00
|
|
|
|
2020-04-16 16:06:18 +02:00
|
|
|
|
2019-09-19 13:25:04 +02:00
|
|
|
def test_10k_set(rips_instance, initialize_test):
|
2019-08-14 09:43:44 +02:00
|
|
|
casePath = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
|
2019-09-19 13:25:04 +02:00
|
|
|
case = rips_instance.project.load_case(path=casePath)
|
2019-08-14 09:43:44 +02:00
|
|
|
|
2026-05-11 08:52:33 +02:00
|
|
|
results = case.active_cell_property(rips.PropertyType.DYNAMIC_NATIVE, "SOIL", 1)
|
|
|
|
|
case.set_active_cell_property(results, rips.PropertyType.GENERATED, "SOIL", 1)
|
2019-08-14 09:43:44 +02:00
|
|
|
|
2020-04-16 16:06:18 +02:00
|
|
|
|
2019-09-19 13:25:04 +02:00
|
|
|
def test_10k_set_out_of_bounds(rips_instance, initialize_test):
|
2019-08-14 09:43:44 +02:00
|
|
|
casePath = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
|
2019-09-19 13:25:04 +02:00
|
|
|
case = rips_instance.project.load_case(path=casePath)
|
2019-08-14 09:43:44 +02:00
|
|
|
|
2026-05-11 08:52:33 +02:00
|
|
|
results = case.active_cell_property(rips.PropertyType.DYNAMIC_NATIVE, "SOIL", 1)
|
2019-08-14 09:43:44 +02:00
|
|
|
results.append(5.0)
|
2025-05-07 11:34:59 +02:00
|
|
|
with pytest.raises(rips.RipsError):
|
2026-05-11 08:52:33 +02:00
|
|
|
assert case.set_active_cell_property(
|
|
|
|
|
results, rips.PropertyType.GENERATED, "SOIL", 1
|
|
|
|
|
)
|
2019-08-14 09:43:44 +02:00
|
|
|
|
2020-04-16 16:06:18 +02:00
|
|
|
|
2019-09-19 13:25:04 +02:00
|
|
|
def test_10k_set_out_of_bounds_client(rips_instance, initialize_test):
|
2019-08-14 09:43:44 +02:00
|
|
|
casePath = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
|
2019-09-19 13:25:04 +02:00
|
|
|
case = rips_instance.project.load_case(path=casePath)
|
2019-08-14 09:43:44 +02:00
|
|
|
|
2026-05-11 08:52:33 +02:00
|
|
|
results = case.active_cell_property(rips.PropertyType.DYNAMIC_NATIVE, "SOIL", 1)
|
2019-09-23 11:50:33 +02:00
|
|
|
case.chunk_size = len(results)
|
2019-08-14 09:43:44 +02:00
|
|
|
results.append(5.0)
|
|
|
|
|
with pytest.raises(IndexError):
|
2026-05-11 08:52:33 +02:00
|
|
|
assert case.set_active_cell_property(
|
|
|
|
|
results, rips.PropertyType.GENERATED, "SOIL", 1
|
|
|
|
|
)
|
2019-08-14 09:43:44 +02:00
|
|
|
|
2020-04-16 16:06:18 +02:00
|
|
|
|
2019-06-06 13:29:47 +02:00
|
|
|
def createResult(poroChunks, permxChunks):
|
2023-02-01 07:46:46 +00:00
|
|
|
for poroChunk, permxChunk in zip(poroChunks, permxChunks):
|
2019-06-06 13:29:47 +02:00
|
|
|
resultChunk = []
|
2023-02-01 07:46:46 +00:00
|
|
|
for poro, permx in zip(poroChunk.values, permxChunk.values):
|
2019-06-06 13:29:47 +02:00
|
|
|
resultChunk.append(poro * permx)
|
|
|
|
|
yield resultChunk
|
|
|
|
|
|
2020-04-16 16:06:18 +02:00
|
|
|
|
2019-08-07 23:33:08 +02:00
|
|
|
def checkResults(poroValues, permxValues, poropermxValues):
|
2023-02-01 07:46:46 +00:00
|
|
|
for poro, permx, poropermx in zip(poroValues, permxValues, poropermxValues):
|
2020-04-16 16:06:18 +02:00
|
|
|
recalc = poro * permx
|
2021-01-26 20:48:01 +01:00
|
|
|
assert recalc == pytest.approx(poropermx, rel=1.0e-10)
|
2020-04-16 16:06:18 +02:00
|
|
|
|
2019-06-06 13:29:47 +02:00
|
|
|
|
2019-09-19 13:25:04 +02:00
|
|
|
def test_10k_PoroPermX(rips_instance, initialize_test):
|
2019-06-06 13:29:47 +02:00
|
|
|
casePath = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
|
2019-09-19 13:25:04 +02:00
|
|
|
case = rips_instance.project.load_case(path=casePath)
|
2019-06-06 13:29:47 +02:00
|
|
|
|
2026-05-11 08:52:33 +02:00
|
|
|
poroChunks = case.active_cell_property_async(
|
|
|
|
|
rips.PropertyType.STATIC_NATIVE, "PORO", 0
|
|
|
|
|
)
|
|
|
|
|
permxChunks = case.active_cell_property_async(
|
|
|
|
|
rips.PropertyType.STATIC_NATIVE, "PERMX", 0
|
|
|
|
|
)
|
2019-06-06 13:29:47 +02:00
|
|
|
|
2021-01-26 20:48:01 +01:00
|
|
|
case.set_active_cell_property_async(
|
2026-05-11 08:52:33 +02:00
|
|
|
createResult(poroChunks, permxChunks),
|
|
|
|
|
rips.PropertyType.GENERATED,
|
|
|
|
|
"POROPERMXAS",
|
|
|
|
|
0,
|
2021-01-26 20:48:01 +01:00
|
|
|
)
|
2019-06-06 13:29:47 +02:00
|
|
|
|
2026-05-11 08:52:33 +02:00
|
|
|
poro = case.active_cell_property(rips.PropertyType.STATIC_NATIVE, "PORO", 0)
|
|
|
|
|
permx = case.active_cell_property(rips.PropertyType.STATIC_NATIVE, "PERMX", 0)
|
|
|
|
|
poroPermX = case.active_cell_property(rips.PropertyType.GENERATED, "POROPERMXAS", 0)
|
2019-06-06 13:29:47 +02:00
|
|
|
|
2019-08-07 23:33:08 +02:00
|
|
|
checkResults(poro, permx, poroPermX)
|
2019-06-06 13:29:47 +02:00
|
|
|
|
2020-04-16 16:06:18 +02:00
|
|
|
|
2026-04-20 15:07:17 +02:00
|
|
|
def test_10k_set_integer_active_cell_property(rips_instance, initialize_test):
|
|
|
|
|
casePath = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
|
|
|
|
|
case = rips_instance.project.load_case(path=casePath)
|
|
|
|
|
|
2026-05-11 08:52:33 +02:00
|
|
|
results = case.active_cell_property(rips.PropertyType.STATIC_NATIVE, "PORO", 0)
|
2026-04-20 15:07:17 +02:00
|
|
|
integer_values = [int(v * 100) for v in results]
|
|
|
|
|
|
|
|
|
|
# A name that does not end with "NUM" - only the data_type flag should
|
|
|
|
|
# cause this to be treated as a discrete/category property.
|
|
|
|
|
case.set_active_cell_property(
|
2026-05-11 08:52:33 +02:00
|
|
|
integer_values,
|
|
|
|
|
rips.PropertyType.GENERATED,
|
|
|
|
|
"MY_DISCRETE_ACTIVE",
|
|
|
|
|
0,
|
|
|
|
|
data_type=rips.PropertyDataType.INTEGER,
|
2026-04-20 15:07:17 +02:00
|
|
|
)
|
|
|
|
|
|
2026-05-11 08:52:33 +02:00
|
|
|
round_trip = case.active_cell_property(
|
|
|
|
|
rips.PropertyType.GENERATED, "MY_DISCRETE_ACTIVE", 0
|
|
|
|
|
)
|
2026-04-20 15:07:17 +02:00
|
|
|
assert len(round_trip) == len(integer_values)
|
|
|
|
|
for expected, actual in zip(integer_values, round_trip):
|
|
|
|
|
assert expected == int(actual)
|
|
|
|
|
|
2026-05-22 10:05:42 +02:00
|
|
|
assert (
|
|
|
|
|
case.property_data_type(
|
|
|
|
|
property_type=rips.PropertyType.GENERATED,
|
|
|
|
|
property_name="MY_DISCRETE_ACTIVE",
|
|
|
|
|
)
|
|
|
|
|
== rips.PropertyDataType.INTEGER
|
2026-05-22 09:59:55 +02:00
|
|
|
)
|
2026-05-22 10:05:42 +02:00
|
|
|
assert (
|
|
|
|
|
case.property_data_type(
|
|
|
|
|
property_type=rips.PropertyType.STATIC_NATIVE,
|
|
|
|
|
property_name="PORO",
|
|
|
|
|
)
|
|
|
|
|
== rips.PropertyDataType.FLOAT
|
2026-05-22 09:59:55 +02:00
|
|
|
)
|
|
|
|
|
|
2026-04-20 15:07:17 +02:00
|
|
|
|
|
|
|
|
def test_10k_set_integer_grid_property(rips_instance, initialize_test):
|
|
|
|
|
casePath = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
|
|
|
|
|
case = rips_instance.project.load_case(path=casePath)
|
|
|
|
|
|
|
|
|
|
grid = case.grid()
|
|
|
|
|
grid_cell_count = grid.cell_count()
|
|
|
|
|
integer_values = [i % 4 for i in range(grid_cell_count)]
|
|
|
|
|
|
|
|
|
|
case.set_grid_property(
|
2026-05-11 08:52:33 +02:00
|
|
|
integer_values,
|
|
|
|
|
rips.PropertyType.GENERATED,
|
|
|
|
|
"MY_DISCRETE_GRID",
|
|
|
|
|
0,
|
|
|
|
|
data_type=rips.PropertyDataType.INTEGER,
|
2026-04-20 15:07:17 +02:00
|
|
|
)
|
|
|
|
|
|
2026-05-11 08:52:33 +02:00
|
|
|
round_trip = case.grid_property(rips.PropertyType.GENERATED, "MY_DISCRETE_GRID", 0)
|
2026-04-20 15:07:17 +02:00
|
|
|
assert len(round_trip) == len(integer_values)
|
|
|
|
|
for expected, actual in zip(integer_values, round_trip):
|
|
|
|
|
assert expected == int(actual)
|
|
|
|
|
|
2026-05-22 10:05:42 +02:00
|
|
|
assert (
|
|
|
|
|
case.property_data_type(
|
|
|
|
|
property_type=rips.PropertyType.GENERATED,
|
|
|
|
|
property_name="MY_DISCRETE_GRID",
|
|
|
|
|
)
|
|
|
|
|
== rips.PropertyDataType.INTEGER
|
2026-05-22 09:59:55 +02:00
|
|
|
)
|
|
|
|
|
|
2026-04-20 15:07:17 +02:00
|
|
|
|
2026-05-11 15:15:46 +02:00
|
|
|
def test_10k_property_strings(rips_instance, initialize_test):
|
|
|
|
|
# Backward-compat coverage: the property/porosity/data-type arguments accept
|
|
|
|
|
# plain strings as an alternative to the typed StrEnum classes. This test
|
|
|
|
|
# exercises only the string form end-to-end so a future refactor that
|
|
|
|
|
# accidentally narrows the accepted types would be caught.
|
|
|
|
|
casePath = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
|
|
|
|
|
case = rips_instance.project.load_case(path=casePath)
|
|
|
|
|
|
|
|
|
|
available = case.available_properties("STATIC_NATIVE", "MATRIX_MODEL")
|
|
|
|
|
assert "PORO" in available
|
|
|
|
|
assert "PERMX" in available
|
|
|
|
|
|
|
|
|
|
poro = case.active_cell_property("STATIC_NATIVE", "PORO", 0)
|
|
|
|
|
assert len(poro) > 0
|
|
|
|
|
|
|
|
|
|
grid_poro = case.grid_property("STATIC_NATIVE", "PORO", 0)
|
|
|
|
|
assert len(grid_poro) > 0
|
|
|
|
|
|
|
|
|
|
integer_values = [int(v * 100) for v in poro]
|
|
|
|
|
case.set_active_cell_property(
|
|
|
|
|
integer_values, "GENERATED", "MY_STRING_DISCRETE", 0, data_type="INTEGER"
|
|
|
|
|
)
|
|
|
|
|
round_trip = case.active_cell_property("GENERATED", "MY_STRING_DISCRETE", 0)
|
|
|
|
|
assert len(round_trip) == len(integer_values)
|
|
|
|
|
|
|
|
|
|
|
2026-05-20 20:34:04 +02:00
|
|
|
def test_10k_grid_property_async(rips_instance, initialize_test):
|
|
|
|
|
casePath = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
|
|
|
|
|
case = rips_instance.project.load_case(path=casePath)
|
|
|
|
|
|
|
|
|
|
chunks = case.grid_property_async(rips.PropertyType.STATIC_NATIVE, "PORO", 0)
|
|
|
|
|
accumulated = []
|
|
|
|
|
chunk_count = 0
|
|
|
|
|
for chunk in chunks:
|
|
|
|
|
accumulated.extend(chunk.values)
|
|
|
|
|
chunk_count += 1
|
|
|
|
|
assert chunk_count > 0
|
|
|
|
|
|
|
|
|
|
sync_values = case.grid_property(rips.PropertyType.STATIC_NATIVE, "PORO", 0)
|
|
|
|
|
assert len(accumulated) == len(sync_values)
|
|
|
|
|
for async_value, sync_value in zip(accumulated, sync_values):
|
|
|
|
|
assert async_value == pytest.approx(sync_value)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_10k_available_properties_categories(rips_instance, initialize_test):
|
|
|
|
|
casePath = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
|
|
|
|
|
case = rips_instance.project.load_case(path=casePath)
|
|
|
|
|
|
|
|
|
|
dynamic = case.available_properties(rips.PropertyType.DYNAMIC_NATIVE)
|
|
|
|
|
assert "SOIL" in dynamic
|
|
|
|
|
assert "PRESSURE" in dynamic
|
|
|
|
|
|
|
|
|
|
cell_count_info = case.cell_count()
|
|
|
|
|
zeros = [0.0] * cell_count_info.active_cell_count
|
|
|
|
|
case.set_active_cell_property(
|
|
|
|
|
zeros, rips.PropertyType.GENERATED, "AVAILABLE_PROBE", 0
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
generated = case.available_properties(rips.PropertyType.GENERATED)
|
|
|
|
|
assert "AVAILABLE_PROBE" in generated
|
|
|
|
|
|
|
|
|
|
|
2019-09-23 11:50:33 +02:00
|
|
|
def test_exportPropertyInView(rips_instance, initialize_test):
|
|
|
|
|
case_path = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
|
2021-09-01 08:25:22 +02:00
|
|
|
case = rips_instance.project.load_case(case_path)
|
|
|
|
|
case.create_view()
|
2019-09-23 11:50:33 +02:00
|
|
|
with tempfile.TemporaryDirectory(prefix="rips") as tmpdirname:
|
|
|
|
|
print("Temporary folder: ", tmpdirname)
|
2021-01-26 20:48:01 +01:00
|
|
|
rips_instance.set_export_folder(export_type="PROPERTIES", path=tmpdirname)
|
2019-11-21 08:13:15 +01:00
|
|
|
case = rips_instance.project.cases()[0]
|
|
|
|
|
view = case.views()[0]
|
2019-09-23 11:50:33 +02:00
|
|
|
view.export_property()
|
|
|
|
|
expected_file_name = case.name + "-" + str("3D_View") + "-" + "T0" + "-SOIL"
|
|
|
|
|
full_path = tmpdirname + "/" + expected_file_name
|
2021-01-26 20:48:01 +01:00
|
|
|
assert os.path.exists(full_path)
|
2026-09-16 15:33:38 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_export_property(rips_instance, initialize_test):
|
|
|
|
|
case_path = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
|
|
|
|
|
case = rips_instance.project.load_case(case_path)
|
|
|
|
|
with tempfile.TemporaryDirectory(prefix="rips") as tmpdirname:
|
|
|
|
|
export_file = os.path.join(tmpdirname, "soil_t1.grdecl")
|
|
|
|
|
case.export_property(time_step=1, property_name="SOIL", export_file=export_file)
|
|
|
|
|
assert os.path.exists(export_file)
|
|
|
|
|
with open(export_file) as f:
|
|
|
|
|
assert "SOIL" in f.read(200)
|
|
|
|
|
|
|
|
|
|
# Keyword override and static property
|
|
|
|
|
export_file = os.path.join(tmpdirname, "poro.grdecl")
|
|
|
|
|
case.export_property(
|
|
|
|
|
time_step=0,
|
|
|
|
|
property_name="PORO",
|
|
|
|
|
eclipse_keyword="MYPORO",
|
|
|
|
|
export_file=export_file,
|
|
|
|
|
)
|
|
|
|
|
with open(export_file) as f:
|
|
|
|
|
assert "MYPORO" in f.read(200)
|
|
|
|
|
|
|
|
|
|
with pytest.raises(rips.RipsError):
|
|
|
|
|
case.export_property(
|
|
|
|
|
time_step=0,
|
|
|
|
|
property_name="NOT_A_PROPERTY",
|
|
|
|
|
export_file=os.path.join(tmpdirname, "x"),
|
|
|
|
|
)
|
|
|
|
|
with pytest.raises(rips.RipsError):
|
|
|
|
|
case.export_property(time_step=0, property_name="PORO")
|
2026-09-16 15:35:54 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_export_current_property(rips_instance, initialize_test):
|
|
|
|
|
case_path = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
|
|
|
|
|
case = rips_instance.project.load_case(case_path)
|
|
|
|
|
view = case.create_view()
|
|
|
|
|
view.set_time_step(1)
|
|
|
|
|
with tempfile.TemporaryDirectory(prefix="rips") as tmpdirname:
|
|
|
|
|
export_file = os.path.join(tmpdirname, "current.grdecl")
|
|
|
|
|
view.export_current_property(export_file=export_file)
|
|
|
|
|
assert os.path.exists(export_file)
|
|
|
|
|
with open(export_file) as f:
|
|
|
|
|
assert "SOIL" in f.read(200)
|
|
|
|
|
|
|
|
|
|
with pytest.raises(rips.RipsError):
|
|
|
|
|
view.export_current_property()
|
2026-09-16 15:40:03 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_export_visible_cells(rips_instance, initialize_test):
|
|
|
|
|
case_path = dataroot.PATH + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"
|
|
|
|
|
case = rips_instance.project.load_case(case_path)
|
|
|
|
|
view = case.create_view()
|
|
|
|
|
with tempfile.TemporaryDirectory(prefix="rips") as tmpdirname:
|
|
|
|
|
export_file = os.path.join(tmpdirname, "fluxnum.grdecl")
|
|
|
|
|
view.export_visible_cells(export_file=export_file)
|
|
|
|
|
assert os.path.exists(export_file)
|
|
|
|
|
with open(export_file) as f:
|
|
|
|
|
assert "FLUXNUM" in f.read(200)
|
|
|
|
|
|
|
|
|
|
export_file = os.path.join(tmpdirname, "actnum.grdecl")
|
|
|
|
|
view.export_visible_cells(
|
|
|
|
|
export_file=export_file,
|
|
|
|
|
export_keyword=rips.VisibleCellsExportKeyword.ACTNUM,
|
|
|
|
|
visible_active_cells_value=2,
|
|
|
|
|
)
|
|
|
|
|
with open(export_file) as f:
|
|
|
|
|
content = f.read()
|
|
|
|
|
assert "ACTNUM" in content[:200]
|
|
|
|
|
# Note: without a GUI no cells are visible, so the exported values are not asserted
|
|
|
|
|
values = content.split("ACTNUM")[1].split("/")[0].split()
|
|
|
|
|
assert len(values) > 0
|
|
|
|
|
|
|
|
|
|
with pytest.raises(rips.RipsError):
|
|
|
|
|
view.export_visible_cells()
|