From d0109daa1c01a45009041966813125ee180e8b69 Mon Sep 17 00:00:00 2001 From: En Yi Tee Date: Tue, 28 Jul 2026 17:34:39 +0800 Subject: [PATCH 1/3] Update fixture to handle 32 lines DO test --- tests/component/conftest.py | 13 +++++++++++++ .../test_digital_single_channel_writer.py | 6 +++--- tests/component/task/test_task_write_waveform_do.py | 4 ++-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/tests/component/conftest.py b/tests/component/conftest.py index 9cfd5225c..7f81d2d5c 100644 --- a/tests/component/conftest.py +++ b/tests/component/conftest.py @@ -665,6 +665,19 @@ def do_port0_task( _start_do_task(task, is_port=True) return task +@pytest.fixture +def do_port0_task_dio32( + generate_task: Callable[[], nidaqmx.Task], real_x_series_device_32dio: nidaqmx.system.Device +) -> nidaqmx.Task: + """Configure a single-channel DO task.""" + task = generate_task() + # Select X Series port 0 32 lines + task.do_channels.add_do_chan( + real_x_series_device_32dio.do_ports[0].name, + line_grouping=LineGrouping.CHAN_FOR_ALL_LINES, + ) + _start_do_task(task, is_port=True) + return task @pytest.fixture def do_port1_task( diff --git a/tests/component/stream_writers/test_digital_single_channel_writer.py b/tests/component/stream_writers/test_digital_single_channel_writer.py index 371b35741..41cc317f8 100644 --- a/tests/component/stream_writers/test_digital_single_channel_writer.py +++ b/tests/component/stream_writers/test_digital_single_channel_writer.py @@ -430,17 +430,17 @@ def test___digital_single_channel_writer___write_waveform_port_uint8___outputs_m def test___digital_single_channel_writer___write_waveform_port_uint32___outputs_match_final_values( - do_port0_task: nidaqmx.Task, + do_port0_task_dio32: nidaqmx.Task, di_port0_loopback_task: nidaqmx.Task, ) -> None: - writer = DigitalSingleChannelWriter(do_port0_task.out_stream) + writer = DigitalSingleChannelWriter(do_port0_task_dio32.out_stream) # Since digital outputs don't have built-in loopback channels like analog outputs, # we can only read back the last value. So to verify the whole signal, we must # write waveforms of increasing length and verify the final value each time. for i in range(1, 10): num_samples = i num_lines = 32 - assert num_lines == _get_num_do_lines_in_task(do_port0_task) + assert num_lines == _get_num_do_lines_in_task(do_port0_task_dio32) waveform = _create_digital_waveform_uint8(num_samples, num_lines) samples_written = writer.write_waveform(waveform) diff --git a/tests/component/task/test_task_write_waveform_do.py b/tests/component/task/test_task_write_waveform_do.py index e1c5c5f3e..f116cd8b9 100644 --- a/tests/component/task/test_task_write_waveform_do.py +++ b/tests/component/task/test_task_write_waveform_do.py @@ -283,7 +283,7 @@ def test___task___write_waveform_port_uint8___outputs_match_final_values( def test___task___write_waveform_port_uint32___outputs_match_final_values( - do_port0_task: nidaqmx.Task, + do_port0_task_dio32: nidaqmx.Task, di_port0_loopback_task: nidaqmx.Task, ) -> None: # Since digital outputs don't have built-in loopback channels like analog outputs, @@ -294,7 +294,7 @@ def test___task___write_waveform_port_uint32___outputs_match_final_values( num_lines = 32 waveform = _create_digital_waveform_uint8(num_samples, num_lines) - samples_written = do_port0_task.write_waveform(waveform) + samples_written = do_port0_task_dio32.write_waveform(waveform) assert samples_written == num_samples actual_value = di_port0_loopback_task.read() From a642f5d607a7139223e844d303f44081cb8043bc Mon Sep 17 00:00:00 2001 From: En Yi Tee Date: Thu, 30 Jul 2026 15:33:41 +0800 Subject: [PATCH 2/3] Update to use dio32 for uint32 loopback read Also do styleguide fix --- tests/component/conftest.py | 2 ++ .../stream_writers/test_digital_single_channel_writer.py | 4 ++-- tests/component/task/test_task_write_waveform_do.py | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/component/conftest.py b/tests/component/conftest.py index 7f81d2d5c..819bb9170 100644 --- a/tests/component/conftest.py +++ b/tests/component/conftest.py @@ -665,6 +665,7 @@ def do_port0_task( _start_do_task(task, is_port=True) return task + @pytest.fixture def do_port0_task_dio32( generate_task: Callable[[], nidaqmx.Task], real_x_series_device_32dio: nidaqmx.system.Device @@ -679,6 +680,7 @@ def do_port0_task_dio32( _start_do_task(task, is_port=True) return task + @pytest.fixture def do_port1_task( generate_task: Callable[[], nidaqmx.Task], real_x_series_device: nidaqmx.system.Device diff --git a/tests/component/stream_writers/test_digital_single_channel_writer.py b/tests/component/stream_writers/test_digital_single_channel_writer.py index 41cc317f8..7b76d3ba6 100644 --- a/tests/component/stream_writers/test_digital_single_channel_writer.py +++ b/tests/component/stream_writers/test_digital_single_channel_writer.py @@ -431,7 +431,7 @@ def test___digital_single_channel_writer___write_waveform_port_uint8___outputs_m def test___digital_single_channel_writer___write_waveform_port_uint32___outputs_match_final_values( do_port0_task_dio32: nidaqmx.Task, - di_port0_loopback_task: nidaqmx.Task, + di_port0_loopback_task_32dio: nidaqmx.Task, ) -> None: writer = DigitalSingleChannelWriter(do_port0_task_dio32.out_stream) # Since digital outputs don't have built-in loopback channels like analog outputs, @@ -445,7 +445,7 @@ def test___digital_single_channel_writer___write_waveform_port_uint32___outputs_ samples_written = writer.write_waveform(waveform) - actual_value = di_port0_loopback_task.read() + actual_value = di_port0_loopback_task_32dio.read() assert samples_written == num_samples assert waveform.signal_count == num_lines assert actual_value == _get_waveform_port_data(waveform)[i - 1] diff --git a/tests/component/task/test_task_write_waveform_do.py b/tests/component/task/test_task_write_waveform_do.py index f116cd8b9..a973caf89 100644 --- a/tests/component/task/test_task_write_waveform_do.py +++ b/tests/component/task/test_task_write_waveform_do.py @@ -284,7 +284,7 @@ def test___task___write_waveform_port_uint8___outputs_match_final_values( def test___task___write_waveform_port_uint32___outputs_match_final_values( do_port0_task_dio32: nidaqmx.Task, - di_port0_loopback_task: nidaqmx.Task, + di_port0_loopback_task_32dio: nidaqmx.Task, ) -> None: # Since digital outputs don't have built-in loopback channels like analog outputs, # we can only read back the last value. So to verify the whole signal, we must @@ -297,7 +297,7 @@ def test___task___write_waveform_port_uint32___outputs_match_final_values( samples_written = do_port0_task_dio32.write_waveform(waveform) assert samples_written == num_samples - actual_value = di_port0_loopback_task.read() + actual_value = di_port0_loopback_task_32dio.read() assert actual_value == _get_waveform_port_data(waveform)[i - 1] From ebb7b020f13a5eaa15af9d1a7935f6c51e971c32 Mon Sep 17 00:00:00 2001 From: En Yi Tee Date: Fri, 31 Jul 2026 10:37:37 +0800 Subject: [PATCH 3/3] Fix incorrect 32dio function name --- tests/component/conftest.py | 2 +- .../stream_writers/test_digital_single_channel_writer.py | 6 +++--- tests/component/task/test_task_write_waveform_do.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/component/conftest.py b/tests/component/conftest.py index 819bb9170..c782cfef2 100644 --- a/tests/component/conftest.py +++ b/tests/component/conftest.py @@ -667,7 +667,7 @@ def do_port0_task( @pytest.fixture -def do_port0_task_dio32( +def do_port0_task_32dio( generate_task: Callable[[], nidaqmx.Task], real_x_series_device_32dio: nidaqmx.system.Device ) -> nidaqmx.Task: """Configure a single-channel DO task.""" diff --git a/tests/component/stream_writers/test_digital_single_channel_writer.py b/tests/component/stream_writers/test_digital_single_channel_writer.py index 7b76d3ba6..48ccf4b00 100644 --- a/tests/component/stream_writers/test_digital_single_channel_writer.py +++ b/tests/component/stream_writers/test_digital_single_channel_writer.py @@ -430,17 +430,17 @@ def test___digital_single_channel_writer___write_waveform_port_uint8___outputs_m def test___digital_single_channel_writer___write_waveform_port_uint32___outputs_match_final_values( - do_port0_task_dio32: nidaqmx.Task, + do_port0_task_32dio: nidaqmx.Task, di_port0_loopback_task_32dio: nidaqmx.Task, ) -> None: - writer = DigitalSingleChannelWriter(do_port0_task_dio32.out_stream) + writer = DigitalSingleChannelWriter(do_port0_task_32dio.out_stream) # Since digital outputs don't have built-in loopback channels like analog outputs, # we can only read back the last value. So to verify the whole signal, we must # write waveforms of increasing length and verify the final value each time. for i in range(1, 10): num_samples = i num_lines = 32 - assert num_lines == _get_num_do_lines_in_task(do_port0_task_dio32) + assert num_lines == _get_num_do_lines_in_task(do_port0_task_32dio) waveform = _create_digital_waveform_uint8(num_samples, num_lines) samples_written = writer.write_waveform(waveform) diff --git a/tests/component/task/test_task_write_waveform_do.py b/tests/component/task/test_task_write_waveform_do.py index a973caf89..28c68bd6a 100644 --- a/tests/component/task/test_task_write_waveform_do.py +++ b/tests/component/task/test_task_write_waveform_do.py @@ -283,7 +283,7 @@ def test___task___write_waveform_port_uint8___outputs_match_final_values( def test___task___write_waveform_port_uint32___outputs_match_final_values( - do_port0_task_dio32: nidaqmx.Task, + do_port0_task_32dio: nidaqmx.Task, di_port0_loopback_task_32dio: nidaqmx.Task, ) -> None: # Since digital outputs don't have built-in loopback channels like analog outputs, @@ -294,7 +294,7 @@ def test___task___write_waveform_port_uint32___outputs_match_final_values( num_lines = 32 waveform = _create_digital_waveform_uint8(num_samples, num_lines) - samples_written = do_port0_task_dio32.write_waveform(waveform) + samples_written = do_port0_task_32dio.write_waveform(waveform) assert samples_written == num_samples actual_value = di_port0_loopback_task_32dio.read()