Skip to content

Commit daf2900

Browse files
TanYiQingYiQingTan
andauthored
Update tests to require X Series device with 32 DIO lines (#753)
* Update tests to require X Series device with 32 DIO lines Tests and fixtures now require a real X Series device with at least 32 digital I/O lines, using the new real_x_series_device_32dio fixture. The _x_series_device helper accepts a line_number parameter for flexible device selection. Minor formatting and assertion changes included. * ni-python-styleguide fix and black src * fix argument incompatible * fix based on ni-python-styleguide * Add 32 DIO device DI loopback fixtures and update test Introduce new pytest fixtures for DI loopback tasks on ports 0, 1, and 2 for both standard and 32 DIO devices. Update the test function to use the 32 DIO-specific fixtures and assertions. Refactor test code to ensure correct fixture usage for each device type. * fix based on ni-python-styleguide * Rename line_number to min_num_lines for clarity The parameter line_number in _x_series_device and its usages has been renamed to min_num_lines to better reflect its purpose as the minimum number of digital lines required. This change affects both the function definition and its call in the real_x_series_device_32dio fixture. No logic was altered. * fix based on ni-python-styleguide --------- Co-authored-by: TanYiQing <[email protected]>
1 parent 5a3995a commit daf2900

File tree

2 files changed

+57
-9
lines changed

2 files changed

+57
-9
lines changed

tests/component/test_stream_writers_do.py

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,19 @@ def di_port0_loopback_task(
160160
return task
161161

162162

163+
@pytest.fixture
164+
def di_port0_loopback_task_32dio(
165+
generate_task: Callable[[], nidaqmx.Task], real_x_series_device_32dio: nidaqmx.system.Device
166+
) -> nidaqmx.Task:
167+
task = generate_task()
168+
task.di_channels.add_di_chan(
169+
real_x_series_device_32dio.di_ports[0].name,
170+
line_grouping=LineGrouping.CHAN_FOR_ALL_LINES,
171+
)
172+
_start_di_task(task)
173+
return task
174+
175+
163176
@pytest.fixture
164177
def di_port1_loopback_task(
165178
generate_task: Callable[[], nidaqmx.Task], real_x_series_device: nidaqmx.system.Device
@@ -173,6 +186,19 @@ def di_port1_loopback_task(
173186
return task
174187

175188

189+
@pytest.fixture
190+
def di_port1_loopback_task_32dio(
191+
generate_task: Callable[[], nidaqmx.Task], real_x_series_device_32dio: nidaqmx.system.Device
192+
) -> nidaqmx.Task:
193+
task = generate_task()
194+
task.di_channels.add_di_chan(
195+
real_x_series_device_32dio.di_ports[1].name,
196+
line_grouping=LineGrouping.CHAN_FOR_ALL_LINES,
197+
)
198+
_start_di_task(task)
199+
return task
200+
201+
176202
@pytest.fixture
177203
def di_port2_loopback_task(
178204
generate_task: Callable[[], nidaqmx.Task], real_x_series_device: nidaqmx.system.Device
@@ -186,6 +212,19 @@ def di_port2_loopback_task(
186212
return task
187213

188214

215+
@pytest.fixture
216+
def di_port2_loopback_task_32dio(
217+
generate_task: Callable[[], nidaqmx.Task], real_x_series_device_32dio: nidaqmx.system.Device
218+
) -> nidaqmx.Task:
219+
task = generate_task()
220+
task.di_channels.add_di_chan(
221+
real_x_series_device_32dio.di_ports[2].name,
222+
line_grouping=LineGrouping.CHAN_FOR_ALL_LINES,
223+
)
224+
_start_di_task(task)
225+
return task
226+
227+
189228
@pytest.fixture
190229
def di_multi_channel_port_loopback_task(
191230
generate_task: Callable[[], nidaqmx.Task], real_x_series_device: nidaqmx.system.Device
@@ -447,14 +486,14 @@ def test___digital_multi_channel_writer___write_one_sample_multi_line___updates_
447486

448487

449488
def test___digital_multi_channel_writer___write_one_sample_multi_line_jagged___updates_output(
450-
di_port0_loopback_task: nidaqmx.Task,
451-
di_port1_loopback_task: nidaqmx.Task,
452-
di_port2_loopback_task: nidaqmx.Task,
489+
di_port0_loopback_task_32dio: nidaqmx.Task,
490+
di_port1_loopback_task_32dio: nidaqmx.Task,
491+
di_port2_loopback_task_32dio: nidaqmx.Task,
453492
generate_task: Callable[[], nidaqmx.Task],
454-
real_x_series_device: nidaqmx.system.Device,
493+
real_x_series_device_32dio: nidaqmx.system.Device,
455494
) -> None:
456495
task = generate_task()
457-
for port in real_x_series_device.do_ports:
496+
for port in real_x_series_device_32dio.do_ports:
458497
task.do_channels.add_do_chan(
459498
port.name,
460499
line_grouping=LineGrouping.CHAN_FOR_ALL_LINES,
@@ -469,9 +508,9 @@ def test___digital_multi_channel_writer___write_one_sample_multi_line_jagged___u
469508
data_to_write = _int_to_bool_array(num_channels * 32, datum).reshape((num_channels, 32))
470509
writer.write_one_sample_multi_line(data_to_write)
471510

472-
assert di_port0_loopback_task.read() == datum & 0xFFFFFFFF
473-
assert di_port1_loopback_task.read() == (datum >> 32) & 0xFF
474-
assert di_port2_loopback_task.read() == (datum >> 64) & 0xFF
511+
assert di_port0_loopback_task_32dio.read() == datum & 0xFFFFFFFF
512+
assert di_port1_loopback_task_32dio.read() == (datum >> 32) & 0xFF
513+
assert di_port2_loopback_task_32dio.read() == (datum >> 64) & 0xFF
475514

476515

477516
def test___digital_multi_channel_writer___write_one_sample_multi_line_with_wrong_dtype___raises_error_with_correct_dtype(

tests/conftest.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ def _x_series_device(
104104
device_type: DeviceType,
105105
system: nidaqmx.system.System,
106106
sampling_type: SamplingType = SamplingType.ANY,
107+
min_num_lines: int = 8,
107108
) -> nidaqmx.system.Device:
108109
for device in system.devices:
109110
device_type_match = (
@@ -127,7 +128,7 @@ def _x_series_device(
127128
and device.product_category == ProductCategory.X_SERIES_DAQ
128129
and len(device.ao_physical_chans) >= 2
129130
and len(device.ai_physical_chans) >= 4
130-
and len(device.do_lines) >= 8
131+
and len(device.do_lines) >= min_num_lines
131132
and len(device.di_lines) == len(device.do_lines)
132133
and len(device.ci_physical_chans) >= 4
133134
):
@@ -180,6 +181,14 @@ def real_x_series_device(system: nidaqmx.system.System) -> nidaqmx.system.Device
180181
return _x_series_device(DeviceType.REAL, system)
181182

182183

184+
@pytest.fixture(scope="function")
185+
def real_x_series_device_32dio(system: nidaqmx.system.System) -> nidaqmx.system.Device:
186+
"""Gets real 32 DIO X Series device information."""
187+
return _x_series_device(
188+
DeviceType.REAL, system, sampling_type=SamplingType.ANY, min_num_lines=32
189+
)
190+
191+
183192
@pytest.fixture(scope="function")
184193
def real_x_series_multiplexed_device(system: nidaqmx.system.System) -> nidaqmx.system.Device:
185194
"""Gets device information for a real X Series device with multiplexed sampling."""

0 commit comments

Comments
 (0)