From b236aa554464dac4b530aec4a384b4baebac3554 Mon Sep 17 00:00:00 2001 From: Rahul R Date: Tue, 8 Jul 2025 14:44:03 +0530 Subject: [PATCH 01/10] Enabling Enum Flags plugin changes --- build/templates/_visatype.py | 1 + build/templates/enums.py.mako | 13 +++++++-- generated/nidcpower/nidcpower/_visatype.py | 1 + generated/nidigital/nidigital/_visatype.py | 1 + generated/nidmm/nidmm/_visatype.py | 1 + .../nifake/nifake/_grpc_stub_interpreter.py | 6 ++++ generated/nifake/nifake/_library.py | 9 ++++++ .../nifake/nifake/_library_interpreter.py | 7 +++++ generated/nifake/nifake/_visatype.py | 1 + generated/nifake/nifake/enums.py | 16 +++++++++++ generated/nifake/nifake/session.py | 14 ++++++++++ .../nifake/nifake/unit_tests/_mock_helper.py | 9 ++++++ .../nifake/nifake/unit_tests/test_session.py | 11 ++++++++ generated/nifgen/nifgen/_visatype.py | 1 + generated/nimodinst/nimodinst/_visatype.py | 1 + generated/nirfsg/nirfsg/_visatype.py | 1 + generated/niscope/niscope/_visatype.py | 1 + generated/nise/nise/_visatype.py | 1 + generated/niswitch/niswitch/_visatype.py | 1 + generated/nitclk/nitclk/_visatype.py | 1 + src/nifake/metadata/enums.py | 27 ++++++++++++++++++ src/nifake/metadata/functions.py | 28 +++++++++++++++++++ src/nifake/unit_tests/test_session.py | 11 ++++++++ 23 files changed, 160 insertions(+), 3 deletions(-) diff --git a/build/templates/_visatype.py b/build/templates/_visatype.py index d9a2917b88..f4da87aa79 100644 --- a/build/templates/_visatype.py +++ b/build/templates/_visatype.py @@ -14,6 +14,7 @@ ViInt32 = ctypes.c_int32 ViUInt32 = ctypes.c_uint32 ViInt64 = ctypes.c_int64 +ViUInt64 = ctypes.c_uint64 ViString = ctypes.c_char_p ViReal32 = ctypes.c_float ViReal64 = ctypes.c_double diff --git a/build/templates/enums.py.mako b/build/templates/enums.py.mako index 76a5aa0037..46bd620bce 100644 --- a/build/templates/enums.py.mako +++ b/build/templates/enums.py.mako @@ -6,16 +6,23 @@ config = template_parameters['metadata'].config enums = config['enums'] %> from enum import Enum +% if any(enums[e].get('enum_class', 'Enum') == 'IntFlag' for e in enums): +from enum import IntFlag +% endif % for enum_name in sorted(helper.filter_codegen_enums(enums)): -class ${enums[enum_name]['python_name']}(Enum): +class ${enums[enum_name]['python_name']}(${enums[enum_name].get('enum_class', 'Enum')}): <% print_list = [] %>\ - % for enum_value in enums[enum_name]['values']: - % if type(enum_value['value']) is str: + % for i, enum_value in enumerate(enums[enum_name]['values']): + % if enums[enum_name].get('enum_class', 'Enum') == 'IntFlag' and enum_value['value'] == 0: + ${enum_value['python_name']} = 0 + % elif type(enum_value['value']) is str: ${enum_value['python_name']} = '${enum_value['value']}' + % elif enums[enum_name].get('enum_class', 'Enum') == 'IntFlag' and isinstance(enum_value['value'], int): + ${enum_value['python_name']} = ${enum_value['value']} % else: ${enum_value['python_name']} = ${enum_value['value']} % endif diff --git a/generated/nidcpower/nidcpower/_visatype.py b/generated/nidcpower/nidcpower/_visatype.py index d9a2917b88..f4da87aa79 100644 --- a/generated/nidcpower/nidcpower/_visatype.py +++ b/generated/nidcpower/nidcpower/_visatype.py @@ -14,6 +14,7 @@ ViInt32 = ctypes.c_int32 ViUInt32 = ctypes.c_uint32 ViInt64 = ctypes.c_int64 +ViUInt64 = ctypes.c_uint64 ViString = ctypes.c_char_p ViReal32 = ctypes.c_float ViReal64 = ctypes.c_double diff --git a/generated/nidigital/nidigital/_visatype.py b/generated/nidigital/nidigital/_visatype.py index d9a2917b88..f4da87aa79 100644 --- a/generated/nidigital/nidigital/_visatype.py +++ b/generated/nidigital/nidigital/_visatype.py @@ -14,6 +14,7 @@ ViInt32 = ctypes.c_int32 ViUInt32 = ctypes.c_uint32 ViInt64 = ctypes.c_int64 +ViUInt64 = ctypes.c_uint64 ViString = ctypes.c_char_p ViReal32 = ctypes.c_float ViReal64 = ctypes.c_double diff --git a/generated/nidmm/nidmm/_visatype.py b/generated/nidmm/nidmm/_visatype.py index d9a2917b88..f4da87aa79 100644 --- a/generated/nidmm/nidmm/_visatype.py +++ b/generated/nidmm/nidmm/_visatype.py @@ -14,6 +14,7 @@ ViInt32 = ctypes.c_int32 ViUInt32 = ctypes.c_uint32 ViInt64 = ctypes.c_int64 +ViUInt64 = ctypes.c_uint64 ViString = ctypes.c_char_p ViReal32 = ctypes.c_float ViReal64 = ctypes.c_double diff --git a/generated/nifake/nifake/_grpc_stub_interpreter.py b/generated/nifake/nifake/_grpc_stub_interpreter.py index 489da15385..b5a7039cfc 100644 --- a/generated/nifake/nifake/_grpc_stub_interpreter.py +++ b/generated/nifake/nifake/_grpc_stub_interpreter.py @@ -144,6 +144,12 @@ def fetch_waveform(self, number_of_samples): # noqa: N802 def fetch_waveform_into(self, number_of_samples): # noqa: N802 raise NotImplementedError('numpy-specific methods are not supported over gRPC') + def function_with_int_flag_parameter(self, flag): # noqa: N802 + self._invoke( + self._client.FunctionWithIntFlagParameter, + grpc_types.FunctionWithIntFlagParameterRequest(vi=self._vi, flag=flag.value), + ) + def function_with_repeated_capability_type(self, site_list): # noqa: N802 raise NotImplementedError('function_with_repeated_capability_type is not supported over gRPC') diff --git a/generated/nifake/nifake/_library.py b/generated/nifake/nifake/_library.py index e9e6e94d6a..9ef1c3d2cb 100644 --- a/generated/nifake/nifake/_library.py +++ b/generated/nifake/nifake/_library.py @@ -36,6 +36,7 @@ def __init__(self, ctypes_library): self.niFake_EnumInputFunctionWithDefaults_cfunc = None self.niFake_ExportAttributeConfigurationBuffer_cfunc = None self.niFake_FetchWaveform_cfunc = None + self.niFake_FunctionWithIntFlagParameter_cfunc = None self.niFake_FunctionWithRepeatedCapabilityType_cfunc = None self.niFake_GetABoolean_cfunc = None self.niFake_GetANumber_cfunc = None @@ -187,6 +188,14 @@ def niFake_FetchWaveform(self, vi, number_of_samples, waveform_data, actual_numb self.niFake_FetchWaveform_cfunc.restype = ViStatus # noqa: F405 return self.niFake_FetchWaveform_cfunc(vi, number_of_samples, waveform_data, actual_number_of_samples) + def niFake_FunctionWithIntFlagParameter(self, vi, flag): # noqa: N802 + with self._func_lock: + if self.niFake_FunctionWithIntFlagParameter_cfunc is None: + self.niFake_FunctionWithIntFlagParameter_cfunc = self._get_library_function('niFake_FunctionWithIntFlagParameter') + self.niFake_FunctionWithIntFlagParameter_cfunc.argtypes = [ViSession, ctypes.POINTER(ViChar)] # noqa: F405 + self.niFake_FunctionWithIntFlagParameter_cfunc.restype = ViStatus # noqa: F405 + return self.niFake_FunctionWithIntFlagParameter_cfunc(vi, flag) + def niFake_FunctionWithRepeatedCapabilityType(self, vi, site_list): # noqa: N802 with self._func_lock: if self.niFake_FunctionWithRepeatedCapabilityType_cfunc is None: diff --git a/generated/nifake/nifake/_library_interpreter.py b/generated/nifake/nifake/_library_interpreter.py index 799c39772d..cab1d2e184 100644 --- a/generated/nifake/nifake/_library_interpreter.py +++ b/generated/nifake/nifake/_library_interpreter.py @@ -218,6 +218,13 @@ def fetch_waveform_into(self, waveform_data): # noqa: N802 errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False) return + def function_with_int_flag_parameter(self, flag): # noqa: N802 + vi_ctype = _visatype.ViSession(self._vi) # case S110 + flag_ctype = ctypes.create_string_buffer(flag.value.encode(self._encoding)) # case C030 + error_code = self._library.niFake_FunctionWithIntFlagParameter(vi_ctype, flag_ctype) + errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False) + return + def function_with_repeated_capability_type(self, site_list): # noqa: N802 vi_ctype = _visatype.ViSession(self._vi) # case S110 site_list_ctype = ctypes.create_string_buffer(site_list.encode(self._encoding)) # case C010 diff --git a/generated/nifake/nifake/_visatype.py b/generated/nifake/nifake/_visatype.py index d9a2917b88..f4da87aa79 100644 --- a/generated/nifake/nifake/_visatype.py +++ b/generated/nifake/nifake/_visatype.py @@ -14,6 +14,7 @@ ViInt32 = ctypes.c_int32 ViUInt32 = ctypes.c_uint32 ViInt64 = ctypes.c_int64 +ViUInt64 = ctypes.c_uint64 ViString = ctypes.c_char_p ViReal32 = ctypes.c_float ViReal64 = ctypes.c_double diff --git a/generated/nifake/nifake/enums.py b/generated/nifake/nifake/enums.py index 7e3d139f46..addfdb0203 100644 --- a/generated/nifake/nifake/enums.py +++ b/generated/nifake/nifake/enums.py @@ -2,6 +2,7 @@ # This file was generated from enum import Enum +from enum import IntFlag class Color(Enum): @@ -53,6 +54,21 @@ class FloatEnum(Enum): ''' +class IntFlagEnum(IntFlag): + A = 1 + r''' + Flag A option. + ''' + B = 2 + r''' + Flag B option. + ''' + C = 4 + r''' + Flag C option. + ''' + + class MobileOSNames(Enum): ANDROID = 'Android' r''' diff --git a/generated/nifake/nifake/session.py b/generated/nifake/nifake/session.py index c81870530b..2597606e09 100644 --- a/generated/nifake/nifake/session.py +++ b/generated/nifake/nifake/session.py @@ -945,6 +945,20 @@ def fetch_waveform_into(self, waveform_data): raise TypeError('waveform_data must be numpy.ndarray of dtype=float64, is ' + str(waveform_data.dtype)) self._interpreter.fetch_waveform_into(waveform_data) + @ivi_synchronized + def function_with_int_flag_parameter(self, flag): + r'''function_with_int_flag_parameter + + Calls a method that takes a flag parameter which can be OR'd from multiple enum values. + + Args: + flag (enums.IntFlagEnum): A flag parameter that can be a combination (bitwise OR) of IntFlagEnum values. + + ''' + if type(flag) is not enums.IntFlagEnum: + raise TypeError('Parameter flag must be of type ' + str(enums.IntFlagEnum)) + self._interpreter.function_with_int_flag_parameter(flag) + @ivi_synchronized def get_a_boolean(self): r'''get_a_boolean diff --git a/generated/nifake/nifake/unit_tests/_mock_helper.py b/generated/nifake/nifake/unit_tests/_mock_helper.py index 7943d3f939..e8025b3e74 100644 --- a/generated/nifake/nifake/unit_tests/_mock_helper.py +++ b/generated/nifake/nifake/unit_tests/_mock_helper.py @@ -42,6 +42,8 @@ def __init__(self): self._defaults['FetchWaveform']['return'] = 0 self._defaults['FetchWaveform']['waveformData'] = None self._defaults['FetchWaveform']['actualNumberOfSamples'] = None + self._defaults['FunctionWithIntFlagParameter'] = {} + self._defaults['FunctionWithIntFlagParameter']['return'] = 0 self._defaults['FunctionWithRepeatedCapabilityType'] = {} self._defaults['FunctionWithRepeatedCapabilityType']['return'] = 0 self._defaults['GetABoolean'] = {} @@ -337,6 +339,11 @@ def niFake_FetchWaveform(self, vi, number_of_samples, waveform_data, actual_numb actual_number_of_samples.contents.value = self._defaults['FetchWaveform']['actualNumberOfSamples'] return self._defaults['FetchWaveform']['return'] + def niFake_FunctionWithIntFlagParameter(self, vi, flag): # noqa: N802 + if self._defaults['FunctionWithIntFlagParameter']['return'] != 0: + return self._defaults['FunctionWithIntFlagParameter']['return'] + return self._defaults['FunctionWithIntFlagParameter']['return'] + def niFake_FunctionWithRepeatedCapabilityType(self, vi, site_list): # noqa: N802 if self._defaults['FunctionWithRepeatedCapabilityType']['return'] != 0: return self._defaults['FunctionWithRepeatedCapabilityType']['return'] @@ -1036,6 +1043,8 @@ def set_side_effects_and_return_values(self, mock_library): mock_library.niFake_ExportAttributeConfigurationBuffer.return_value = 0 mock_library.niFake_FetchWaveform.side_effect = MockFunctionCallError("niFake_FetchWaveform") mock_library.niFake_FetchWaveform.return_value = 0 + mock_library.niFake_FunctionWithIntFlagParameter.side_effect = MockFunctionCallError("niFake_FunctionWithIntFlagParameter") + mock_library.niFake_FunctionWithIntFlagParameter.return_value = 0 mock_library.niFake_FunctionWithRepeatedCapabilityType.side_effect = MockFunctionCallError("niFake_FunctionWithRepeatedCapabilityType") mock_library.niFake_FunctionWithRepeatedCapabilityType.return_value = 0 mock_library.niFake_GetABoolean.side_effect = MockFunctionCallError("niFake_GetABoolean") diff --git a/generated/nifake/nifake/unit_tests/test_session.py b/generated/nifake/nifake/unit_tests/test_session.py index 16af4e81a9..9db7775184 100644 --- a/generated/nifake/nifake/unit_tests/test_session.py +++ b/generated/nifake/nifake/unit_tests/test_session.py @@ -837,6 +837,17 @@ def test_return_timedeltas(self): assert returned_timedeltas == expected_timedeltas self.patched_library_interpreter.return_list_of_durations_in_seconds.assert_called_once_with(len(time_values)) + def test_function_with_int_flag_parameter(self): + import functools + import operator + session = nifake.Session('dev1') + # Patch the library interpreter function + with patch.object(session._interpreter, 'function_with_int_flag_parameter', return_value=None) as mock_func: + # OR all flags together + flags = functools.reduce(operator.or_, list(nifake.IntFlagEnum)) + session.function_with_int_flag_parameter(flags) + mock_func.assert_called_once_with(flags) + def test_session_write_waveform_numpy_complex64_invalid_dtype(self): invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex128) expected_error_message = "waveform_data_array must be numpy.ndarray of dtype=complex64, is complex128" diff --git a/generated/nifgen/nifgen/_visatype.py b/generated/nifgen/nifgen/_visatype.py index d9a2917b88..f4da87aa79 100644 --- a/generated/nifgen/nifgen/_visatype.py +++ b/generated/nifgen/nifgen/_visatype.py @@ -14,6 +14,7 @@ ViInt32 = ctypes.c_int32 ViUInt32 = ctypes.c_uint32 ViInt64 = ctypes.c_int64 +ViUInt64 = ctypes.c_uint64 ViString = ctypes.c_char_p ViReal32 = ctypes.c_float ViReal64 = ctypes.c_double diff --git a/generated/nimodinst/nimodinst/_visatype.py b/generated/nimodinst/nimodinst/_visatype.py index d9a2917b88..f4da87aa79 100644 --- a/generated/nimodinst/nimodinst/_visatype.py +++ b/generated/nimodinst/nimodinst/_visatype.py @@ -14,6 +14,7 @@ ViInt32 = ctypes.c_int32 ViUInt32 = ctypes.c_uint32 ViInt64 = ctypes.c_int64 +ViUInt64 = ctypes.c_uint64 ViString = ctypes.c_char_p ViReal32 = ctypes.c_float ViReal64 = ctypes.c_double diff --git a/generated/nirfsg/nirfsg/_visatype.py b/generated/nirfsg/nirfsg/_visatype.py index d9a2917b88..f4da87aa79 100644 --- a/generated/nirfsg/nirfsg/_visatype.py +++ b/generated/nirfsg/nirfsg/_visatype.py @@ -14,6 +14,7 @@ ViInt32 = ctypes.c_int32 ViUInt32 = ctypes.c_uint32 ViInt64 = ctypes.c_int64 +ViUInt64 = ctypes.c_uint64 ViString = ctypes.c_char_p ViReal32 = ctypes.c_float ViReal64 = ctypes.c_double diff --git a/generated/niscope/niscope/_visatype.py b/generated/niscope/niscope/_visatype.py index d9a2917b88..f4da87aa79 100644 --- a/generated/niscope/niscope/_visatype.py +++ b/generated/niscope/niscope/_visatype.py @@ -14,6 +14,7 @@ ViInt32 = ctypes.c_int32 ViUInt32 = ctypes.c_uint32 ViInt64 = ctypes.c_int64 +ViUInt64 = ctypes.c_uint64 ViString = ctypes.c_char_p ViReal32 = ctypes.c_float ViReal64 = ctypes.c_double diff --git a/generated/nise/nise/_visatype.py b/generated/nise/nise/_visatype.py index d9a2917b88..f4da87aa79 100644 --- a/generated/nise/nise/_visatype.py +++ b/generated/nise/nise/_visatype.py @@ -14,6 +14,7 @@ ViInt32 = ctypes.c_int32 ViUInt32 = ctypes.c_uint32 ViInt64 = ctypes.c_int64 +ViUInt64 = ctypes.c_uint64 ViString = ctypes.c_char_p ViReal32 = ctypes.c_float ViReal64 = ctypes.c_double diff --git a/generated/niswitch/niswitch/_visatype.py b/generated/niswitch/niswitch/_visatype.py index d9a2917b88..f4da87aa79 100644 --- a/generated/niswitch/niswitch/_visatype.py +++ b/generated/niswitch/niswitch/_visatype.py @@ -14,6 +14,7 @@ ViInt32 = ctypes.c_int32 ViUInt32 = ctypes.c_uint32 ViInt64 = ctypes.c_int64 +ViUInt64 = ctypes.c_uint64 ViString = ctypes.c_char_p ViReal32 = ctypes.c_float ViReal64 = ctypes.c_double diff --git a/generated/nitclk/nitclk/_visatype.py b/generated/nitclk/nitclk/_visatype.py index d9a2917b88..f4da87aa79 100644 --- a/generated/nitclk/nitclk/_visatype.py +++ b/generated/nitclk/nitclk/_visatype.py @@ -14,6 +14,7 @@ ViInt32 = ctypes.c_int32 ViUInt32 = ctypes.c_uint32 ViInt64 = ctypes.c_int64 +ViUInt64 = ctypes.c_uint64 ViString = ctypes.c_char_p ViReal32 = ctypes.c_float ViReal64 = ctypes.c_double diff --git a/src/nifake/metadata/enums.py b/src/nifake/metadata/enums.py index 97ebe3add5..db15fea383 100644 --- a/src/nifake/metadata/enums.py +++ b/src/nifake/metadata/enums.py @@ -239,6 +239,33 @@ } ] }, + 'IntFlagEnum': { + 'codegen_method': 'public', + 'enum_class': 'IntFlag', + 'values': [ + { + 'documentation': { + 'description': 'Flag A option.' + }, + 'name': 'NIFAKE_VAL_FLAG_A', + 'value': 1 + }, + { + 'documentation': { + 'description': 'Flag B option.' + }, + 'name': 'NIFAKE_VAL_FLAG_B', + 'value': 2 + }, + { + 'documentation': { + 'description': 'Flag C option.' + }, + 'name': 'NIFAKE_VAL_FLAG_C', + 'value': 4 + } + ] + }, 'MobileOSNames': { 'values': [ { diff --git a/src/nifake/metadata/functions.py b/src/nifake/metadata/functions.py index 210bf444fb..be01579f27 100644 --- a/src/nifake/metadata/functions.py +++ b/src/nifake/metadata/functions.py @@ -347,6 +347,34 @@ } ], 'returns': 'ViStatus' + }, + 'FunctionWithIntFlagParameter': { + 'codegen_method': 'public', + 'documentation': { + 'description': "Calls a function that takes a flag parameter which can be OR'd from multiple enum values." + }, + 'included_in_proto': True, + 'parameters': [ + { + 'direction': 'in', + 'documentation': { + 'description': 'The VI.' + }, + 'name': 'vi', + 'type': 'ViSession' + }, + { + 'direction': 'in', + 'documentation': { + 'description': 'A flag parameter that can be a combination (bitwise OR) of IntFlagEnum values.' + }, + 'enum': 'IntFlagEnum', + 'grpc_enum': None, + 'name': 'flag', + 'type': 'ViString' + } + ], + 'returns': 'ViStatus' }, 'FunctionWithRepeatedCapabilityType': { 'documentation': { diff --git a/src/nifake/unit_tests/test_session.py b/src/nifake/unit_tests/test_session.py index 16af4e81a9..9db7775184 100644 --- a/src/nifake/unit_tests/test_session.py +++ b/src/nifake/unit_tests/test_session.py @@ -837,6 +837,17 @@ def test_return_timedeltas(self): assert returned_timedeltas == expected_timedeltas self.patched_library_interpreter.return_list_of_durations_in_seconds.assert_called_once_with(len(time_values)) + def test_function_with_int_flag_parameter(self): + import functools + import operator + session = nifake.Session('dev1') + # Patch the library interpreter function + with patch.object(session._interpreter, 'function_with_int_flag_parameter', return_value=None) as mock_func: + # OR all flags together + flags = functools.reduce(operator.or_, list(nifake.IntFlagEnum)) + session.function_with_int_flag_parameter(flags) + mock_func.assert_called_once_with(flags) + def test_session_write_waveform_numpy_complex64_invalid_dtype(self): invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex128) expected_error_message = "waveform_data_array must be numpy.ndarray of dtype=complex64, is complex128" From 717925bc51dd34a185776f852e70923b15c918af Mon Sep 17 00:00:00 2001 From: Rahul R Date: Tue, 8 Jul 2025 17:08:20 +0530 Subject: [PATCH 02/10] Updating the test cases --- .../nifake/nifake/unit_tests/test_session.py | 24 ++++++++++++------- src/nifake/metadata/functions.py | 2 +- src/nifake/unit_tests/test_session.py | 24 ++++++++++++------- 3 files changed, 31 insertions(+), 19 deletions(-) diff --git a/generated/nifake/nifake/unit_tests/test_session.py b/generated/nifake/nifake/unit_tests/test_session.py index 9db7775184..993405377a 100644 --- a/generated/nifake/nifake/unit_tests/test_session.py +++ b/generated/nifake/nifake/unit_tests/test_session.py @@ -837,16 +837,22 @@ def test_return_timedeltas(self): assert returned_timedeltas == expected_timedeltas self.patched_library_interpreter.return_list_of_durations_in_seconds.assert_called_once_with(len(time_values)) - def test_function_with_int_flag_parameter(self): - import functools - import operator - session = nifake.Session('dev1') - # Patch the library interpreter function - with patch.object(session._interpreter, 'function_with_int_flag_parameter', return_value=None) as mock_func: - # OR all flags together - flags = functools.reduce(operator.or_, list(nifake.IntFlagEnum)) + def test_function_with_int_flag_parameter_with_specific_flags(self): + flags = nifake.IntFlagEnum.A | nifake.IntFlagEnum.B + self.patched_library_interpreter.function_with_int_flag_parameter.side_effect = None + self.patched_library_interpreter.function_with_int_flag_parameter.return_value = None + with nifake.Session('dev1') as session: session.function_with_int_flag_parameter(flags) - mock_func.assert_called_once_with(flags) + self.patched_library_interpreter.function_with_int_flag_parameter.assert_called_once_with(flags) + + def test_function_with_int_flag_parameter_invalid_type(self): + invalid_flag = "not_an_intflag" + import pytest + with nifake.Session('dev1') as session: + with pytest.raises(TypeError) as exc_info: + session.function_with_int_flag_parameter(invalid_flag) + assert "Parameter flag must be of type" in str(exc_info.value) + assert "IntFlagEnum" in str(exc_info.value) def test_session_write_waveform_numpy_complex64_invalid_dtype(self): invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex128) diff --git a/src/nifake/metadata/functions.py b/src/nifake/metadata/functions.py index be01579f27..8d22d6c9af 100644 --- a/src/nifake/metadata/functions.py +++ b/src/nifake/metadata/functions.py @@ -348,7 +348,7 @@ ], 'returns': 'ViStatus' }, - 'FunctionWithIntFlagParameter': { + 'FunctionWithIntFlagParameter': { 'codegen_method': 'public', 'documentation': { 'description': "Calls a function that takes a flag parameter which can be OR'd from multiple enum values." diff --git a/src/nifake/unit_tests/test_session.py b/src/nifake/unit_tests/test_session.py index 9db7775184..993405377a 100644 --- a/src/nifake/unit_tests/test_session.py +++ b/src/nifake/unit_tests/test_session.py @@ -837,16 +837,22 @@ def test_return_timedeltas(self): assert returned_timedeltas == expected_timedeltas self.patched_library_interpreter.return_list_of_durations_in_seconds.assert_called_once_with(len(time_values)) - def test_function_with_int_flag_parameter(self): - import functools - import operator - session = nifake.Session('dev1') - # Patch the library interpreter function - with patch.object(session._interpreter, 'function_with_int_flag_parameter', return_value=None) as mock_func: - # OR all flags together - flags = functools.reduce(operator.or_, list(nifake.IntFlagEnum)) + def test_function_with_int_flag_parameter_with_specific_flags(self): + flags = nifake.IntFlagEnum.A | nifake.IntFlagEnum.B + self.patched_library_interpreter.function_with_int_flag_parameter.side_effect = None + self.patched_library_interpreter.function_with_int_flag_parameter.return_value = None + with nifake.Session('dev1') as session: session.function_with_int_flag_parameter(flags) - mock_func.assert_called_once_with(flags) + self.patched_library_interpreter.function_with_int_flag_parameter.assert_called_once_with(flags) + + def test_function_with_int_flag_parameter_invalid_type(self): + invalid_flag = "not_an_intflag" + import pytest + with nifake.Session('dev1') as session: + with pytest.raises(TypeError) as exc_info: + session.function_with_int_flag_parameter(invalid_flag) + assert "Parameter flag must be of type" in str(exc_info.value) + assert "IntFlagEnum" in str(exc_info.value) def test_session_write_waveform_numpy_complex64_invalid_dtype(self): invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex128) From d668fb323d4ab2f38503be4a19a36d5ee99f8f0a Mon Sep 17 00:00:00 2001 From: Rahul R Date: Tue, 8 Jul 2025 17:11:00 +0530 Subject: [PATCH 03/10] Making import pytest to global --- generated/nifake/nifake/unit_tests/test_session.py | 5 +---- src/nifake/unit_tests/test_session.py | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/generated/nifake/nifake/unit_tests/test_session.py b/generated/nifake/nifake/unit_tests/test_session.py index 993405377a..6e675e1c0a 100644 --- a/generated/nifake/nifake/unit_tests/test_session.py +++ b/generated/nifake/nifake/unit_tests/test_session.py @@ -4,6 +4,7 @@ import nifake import nifake.errors import numpy +import pytest from unittest.mock import MagicMock from unittest.mock import patch @@ -847,7 +848,6 @@ def test_function_with_int_flag_parameter_with_specific_flags(self): def test_function_with_int_flag_parameter_invalid_type(self): invalid_flag = "not_an_intflag" - import pytest with nifake.Session('dev1') as session: with pytest.raises(TypeError) as exc_info: session.function_with_int_flag_parameter(invalid_flag) @@ -857,7 +857,6 @@ def test_function_with_int_flag_parameter_invalid_type(self): def test_session_write_waveform_numpy_complex64_invalid_dtype(self): invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex128) expected_error_message = "waveform_data_array must be numpy.ndarray of dtype=complex64, is complex128" - import pytest with nifake.Session('dev1') as session: with pytest.raises(TypeError) as exc_info: session.write_waveform_numpy_complex64(invalid_waveform_data) @@ -866,7 +865,6 @@ def test_session_write_waveform_numpy_complex64_invalid_dtype(self): def test_session_write_waveform_numpy_complex128_invalid_dtype(self): invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex64) expected_error_message = "waveform_data_array must be numpy.ndarray of dtype=complex128, is complex64" - import pytest with nifake.Session('dev1') as session: with pytest.raises(TypeError) as exc_info: session.write_waveform_numpy_complex128(invalid_waveform_data) @@ -875,7 +873,6 @@ def test_session_write_waveform_numpy_complex128_invalid_dtype(self): def test_session_write_waveform_numpy_complex_interleaved_i16_invalid_dtype(self): invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex64) expected_error_message = "waveform_data_array must be numpy.ndarray of dtype=int16, is complex64" - import pytest with nifake.Session('dev1') as session: with pytest.raises(TypeError) as exc_info: session.write_waveform_numpy_complex_interleaved_i16(invalid_waveform_data) diff --git a/src/nifake/unit_tests/test_session.py b/src/nifake/unit_tests/test_session.py index 993405377a..6e675e1c0a 100644 --- a/src/nifake/unit_tests/test_session.py +++ b/src/nifake/unit_tests/test_session.py @@ -4,6 +4,7 @@ import nifake import nifake.errors import numpy +import pytest from unittest.mock import MagicMock from unittest.mock import patch @@ -847,7 +848,6 @@ def test_function_with_int_flag_parameter_with_specific_flags(self): def test_function_with_int_flag_parameter_invalid_type(self): invalid_flag = "not_an_intflag" - import pytest with nifake.Session('dev1') as session: with pytest.raises(TypeError) as exc_info: session.function_with_int_flag_parameter(invalid_flag) @@ -857,7 +857,6 @@ def test_function_with_int_flag_parameter_invalid_type(self): def test_session_write_waveform_numpy_complex64_invalid_dtype(self): invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex128) expected_error_message = "waveform_data_array must be numpy.ndarray of dtype=complex64, is complex128" - import pytest with nifake.Session('dev1') as session: with pytest.raises(TypeError) as exc_info: session.write_waveform_numpy_complex64(invalid_waveform_data) @@ -866,7 +865,6 @@ def test_session_write_waveform_numpy_complex64_invalid_dtype(self): def test_session_write_waveform_numpy_complex128_invalid_dtype(self): invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex64) expected_error_message = "waveform_data_array must be numpy.ndarray of dtype=complex128, is complex64" - import pytest with nifake.Session('dev1') as session: with pytest.raises(TypeError) as exc_info: session.write_waveform_numpy_complex128(invalid_waveform_data) @@ -875,7 +873,6 @@ def test_session_write_waveform_numpy_complex128_invalid_dtype(self): def test_session_write_waveform_numpy_complex_interleaved_i16_invalid_dtype(self): invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex64) expected_error_message = "waveform_data_array must be numpy.ndarray of dtype=int16, is complex64" - import pytest with nifake.Session('dev1') as session: with pytest.raises(TypeError) as exc_info: session.write_waveform_numpy_complex_interleaved_i16(invalid_waveform_data) From 1fd475fcf0b3d37fab23b8a7b16d168f700f0f37 Mon Sep 17 00:00:00 2001 From: Rahul R Date: Tue, 8 Jul 2025 18:53:43 +0530 Subject: [PATCH 04/10] Updating documentation changes --- src/nifake/metadata/functions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nifake/metadata/functions.py b/src/nifake/metadata/functions.py index 8d22d6c9af..f23ba05c90 100644 --- a/src/nifake/metadata/functions.py +++ b/src/nifake/metadata/functions.py @@ -358,7 +358,7 @@ { 'direction': 'in', 'documentation': { - 'description': 'The VI.' + 'description': 'Identifies a particular instrument session.' }, 'name': 'vi', 'type': 'ViSession' From 3c88c9ff404898bf4be99ddb1ad9dac1d85a1774 Mon Sep 17 00:00:00 2001 From: Rahul R Date: Tue, 8 Jul 2025 22:32:04 +0530 Subject: [PATCH 05/10] Updating enum type --- generated/nifake/nifake/_library.py | 2 +- generated/nifake/nifake/_library_interpreter.py | 2 +- src/nifake/metadata/functions.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/generated/nifake/nifake/_library.py b/generated/nifake/nifake/_library.py index 9ef1c3d2cb..cbb2f30541 100644 --- a/generated/nifake/nifake/_library.py +++ b/generated/nifake/nifake/_library.py @@ -192,7 +192,7 @@ def niFake_FunctionWithIntFlagParameter(self, vi, flag): # noqa: N802 with self._func_lock: if self.niFake_FunctionWithIntFlagParameter_cfunc is None: self.niFake_FunctionWithIntFlagParameter_cfunc = self._get_library_function('niFake_FunctionWithIntFlagParameter') - self.niFake_FunctionWithIntFlagParameter_cfunc.argtypes = [ViSession, ctypes.POINTER(ViChar)] # noqa: F405 + self.niFake_FunctionWithIntFlagParameter_cfunc.argtypes = [ViSession, ViUInt64] # noqa: F405 self.niFake_FunctionWithIntFlagParameter_cfunc.restype = ViStatus # noqa: F405 return self.niFake_FunctionWithIntFlagParameter_cfunc(vi, flag) diff --git a/generated/nifake/nifake/_library_interpreter.py b/generated/nifake/nifake/_library_interpreter.py index cab1d2e184..25b1a439f4 100644 --- a/generated/nifake/nifake/_library_interpreter.py +++ b/generated/nifake/nifake/_library_interpreter.py @@ -220,7 +220,7 @@ def fetch_waveform_into(self, waveform_data): # noqa: N802 def function_with_int_flag_parameter(self, flag): # noqa: N802 vi_ctype = _visatype.ViSession(self._vi) # case S110 - flag_ctype = ctypes.create_string_buffer(flag.value.encode(self._encoding)) # case C030 + flag_ctype = _visatype.ViUInt64(flag.value) # case S130 error_code = self._library.niFake_FunctionWithIntFlagParameter(vi_ctype, flag_ctype) errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False) return diff --git a/src/nifake/metadata/functions.py b/src/nifake/metadata/functions.py index f23ba05c90..e3d2159c06 100644 --- a/src/nifake/metadata/functions.py +++ b/src/nifake/metadata/functions.py @@ -371,7 +371,7 @@ 'enum': 'IntFlagEnum', 'grpc_enum': None, 'name': 'flag', - 'type': 'ViString' + 'type': 'ViUInt64' } ], 'returns': 'ViStatus' From 4aa5d28cfcf89931161d13ed1886a9149c9be465 Mon Sep 17 00:00:00 2001 From: Rahul R Date: Fri, 11 Jul 2025 03:28:49 +0530 Subject: [PATCH 06/10] Updating the test case to check the values --- generated/nifake/nifake/unit_tests/test_session.py | 6 ++++-- src/nifake/unit_tests/test_session.py | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/generated/nifake/nifake/unit_tests/test_session.py b/generated/nifake/nifake/unit_tests/test_session.py index 6e675e1c0a..7fc2c2fd3d 100644 --- a/generated/nifake/nifake/unit_tests/test_session.py +++ b/generated/nifake/nifake/unit_tests/test_session.py @@ -838,13 +838,15 @@ def test_return_timedeltas(self): assert returned_timedeltas == expected_timedeltas self.patched_library_interpreter.return_list_of_durations_in_seconds.assert_called_once_with(len(time_values)) - def test_function_with_int_flag_parameter_with_specific_flags(self): - flags = nifake.IntFlagEnum.A | nifake.IntFlagEnum.B + def test_function_with_int_flag_parameter_with_specific_flag(self): + flags = nifake.IntFlagEnum.C self.patched_library_interpreter.function_with_int_flag_parameter.side_effect = None self.patched_library_interpreter.function_with_int_flag_parameter.return_value = None with nifake.Session('dev1') as session: session.function_with_int_flag_parameter(flags) self.patched_library_interpreter.function_with_int_flag_parameter.assert_called_once_with(flags) + called_arg = self.patched_library_interpreter.function_with_int_flag_parameter.call_args[0][0] + assert called_arg == 1 or called_arg.value == 4 def test_function_with_int_flag_parameter_invalid_type(self): invalid_flag = "not_an_intflag" diff --git a/src/nifake/unit_tests/test_session.py b/src/nifake/unit_tests/test_session.py index 6e675e1c0a..7fc2c2fd3d 100644 --- a/src/nifake/unit_tests/test_session.py +++ b/src/nifake/unit_tests/test_session.py @@ -838,13 +838,15 @@ def test_return_timedeltas(self): assert returned_timedeltas == expected_timedeltas self.patched_library_interpreter.return_list_of_durations_in_seconds.assert_called_once_with(len(time_values)) - def test_function_with_int_flag_parameter_with_specific_flags(self): - flags = nifake.IntFlagEnum.A | nifake.IntFlagEnum.B + def test_function_with_int_flag_parameter_with_specific_flag(self): + flags = nifake.IntFlagEnum.C self.patched_library_interpreter.function_with_int_flag_parameter.side_effect = None self.patched_library_interpreter.function_with_int_flag_parameter.return_value = None with nifake.Session('dev1') as session: session.function_with_int_flag_parameter(flags) self.patched_library_interpreter.function_with_int_flag_parameter.assert_called_once_with(flags) + called_arg = self.patched_library_interpreter.function_with_int_flag_parameter.call_args[0][0] + assert called_arg == 1 or called_arg.value == 4 def test_function_with_int_flag_parameter_invalid_type(self): invalid_flag = "not_an_intflag" From 33148df59107aa6c011be1d329f3ad9a834ef2be Mon Sep 17 00:00:00 2001 From: Rahul R Date: Mon, 14 Jul 2025 11:26:53 +0530 Subject: [PATCH 07/10] Updating the test case based on code review --- generated/nifake/nifake/unit_tests/test_session.py | 2 -- src/nifake/unit_tests/test_session.py | 2 -- 2 files changed, 4 deletions(-) diff --git a/generated/nifake/nifake/unit_tests/test_session.py b/generated/nifake/nifake/unit_tests/test_session.py index 7fc2c2fd3d..61bb00dc11 100644 --- a/generated/nifake/nifake/unit_tests/test_session.py +++ b/generated/nifake/nifake/unit_tests/test_session.py @@ -845,8 +845,6 @@ def test_function_with_int_flag_parameter_with_specific_flag(self): with nifake.Session('dev1') as session: session.function_with_int_flag_parameter(flags) self.patched_library_interpreter.function_with_int_flag_parameter.assert_called_once_with(flags) - called_arg = self.patched_library_interpreter.function_with_int_flag_parameter.call_args[0][0] - assert called_arg == 1 or called_arg.value == 4 def test_function_with_int_flag_parameter_invalid_type(self): invalid_flag = "not_an_intflag" diff --git a/src/nifake/unit_tests/test_session.py b/src/nifake/unit_tests/test_session.py index 7fc2c2fd3d..61bb00dc11 100644 --- a/src/nifake/unit_tests/test_session.py +++ b/src/nifake/unit_tests/test_session.py @@ -845,8 +845,6 @@ def test_function_with_int_flag_parameter_with_specific_flag(self): with nifake.Session('dev1') as session: session.function_with_int_flag_parameter(flags) self.patched_library_interpreter.function_with_int_flag_parameter.assert_called_once_with(flags) - called_arg = self.patched_library_interpreter.function_with_int_flag_parameter.call_args[0][0] - assert called_arg == 1 or called_arg.value == 4 def test_function_with_int_flag_parameter_invalid_type(self): invalid_flag = "not_an_intflag" From ca0ffe61f8d955351afe55664fa0cfb47bd24fe2 Mon Sep 17 00:00:00 2001 From: Rahul R Date: Mon, 14 Jul 2025 20:45:35 +0530 Subject: [PATCH 08/10] Code review comments --- build/templates/enums.py.mako | 8 ++------ .../nifake/nifake/_grpc_stub_interpreter.py | 6 +++--- generated/nifake/nifake/_library.py | 14 ++++++------- .../nifake/nifake/_library_interpreter.py | 4 ++-- generated/nifake/nifake/enums.py | 2 +- generated/nifake/nifake/session.py | 6 +++--- .../nifake/nifake/unit_tests/_mock_helper.py | 16 +++++++-------- .../nifake/nifake/unit_tests/test_session.py | 20 ++++++++++--------- src/nifake/metadata/enums.py | 2 +- src/nifake/metadata/functions.py | 2 +- src/nifake/unit_tests/test_session.py | 20 ++++++++++--------- 11 files changed, 50 insertions(+), 50 deletions(-) diff --git a/build/templates/enums.py.mako b/build/templates/enums.py.mako index 46bd620bce..ce6d0e535c 100644 --- a/build/templates/enums.py.mako +++ b/build/templates/enums.py.mako @@ -16,13 +16,9 @@ class ${enums[enum_name]['python_name']}(${enums[enum_name].get('enum_class', 'E <% print_list = [] %>\ - % for i, enum_value in enumerate(enums[enum_name]['values']): - % if enums[enum_name].get('enum_class', 'Enum') == 'IntFlag' and enum_value['value'] == 0: - ${enum_value['python_name']} = 0 - % elif type(enum_value['value']) is str: + % for enum_value in enums[enum_name]['values']: + % if type(enum_value['value']) is str: ${enum_value['python_name']} = '${enum_value['value']}' - % elif enums[enum_name].get('enum_class', 'Enum') == 'IntFlag' and isinstance(enum_value['value'], int): - ${enum_value['python_name']} = ${enum_value['value']} % else: ${enum_value['python_name']} = ${enum_value['value']} % endif diff --git a/generated/nifake/nifake/_grpc_stub_interpreter.py b/generated/nifake/nifake/_grpc_stub_interpreter.py index b5a7039cfc..829c8657e3 100644 --- a/generated/nifake/nifake/_grpc_stub_interpreter.py +++ b/generated/nifake/nifake/_grpc_stub_interpreter.py @@ -144,10 +144,10 @@ def fetch_waveform(self, number_of_samples): # noqa: N802 def fetch_waveform_into(self, number_of_samples): # noqa: N802 raise NotImplementedError('numpy-specific methods are not supported over gRPC') - def function_with_int_flag_parameter(self, flag): # noqa: N802 + def function_with_intflag_parameter(self, flag): # noqa: N802 self._invoke( - self._client.FunctionWithIntFlagParameter, - grpc_types.FunctionWithIntFlagParameterRequest(vi=self._vi, flag=flag.value), + self._client.FunctionWithIntflagParameter, + grpc_types.FunctionWithIntflagParameterRequest(vi=self._vi, flag=flag.value), ) def function_with_repeated_capability_type(self, site_list): # noqa: N802 diff --git a/generated/nifake/nifake/_library.py b/generated/nifake/nifake/_library.py index cbb2f30541..0033ec0a56 100644 --- a/generated/nifake/nifake/_library.py +++ b/generated/nifake/nifake/_library.py @@ -36,7 +36,7 @@ def __init__(self, ctypes_library): self.niFake_EnumInputFunctionWithDefaults_cfunc = None self.niFake_ExportAttributeConfigurationBuffer_cfunc = None self.niFake_FetchWaveform_cfunc = None - self.niFake_FunctionWithIntFlagParameter_cfunc = None + self.niFake_FunctionWithIntflagParameter_cfunc = None self.niFake_FunctionWithRepeatedCapabilityType_cfunc = None self.niFake_GetABoolean_cfunc = None self.niFake_GetANumber_cfunc = None @@ -188,13 +188,13 @@ def niFake_FetchWaveform(self, vi, number_of_samples, waveform_data, actual_numb self.niFake_FetchWaveform_cfunc.restype = ViStatus # noqa: F405 return self.niFake_FetchWaveform_cfunc(vi, number_of_samples, waveform_data, actual_number_of_samples) - def niFake_FunctionWithIntFlagParameter(self, vi, flag): # noqa: N802 + def niFake_FunctionWithIntflagParameter(self, vi, flag): # noqa: N802 with self._func_lock: - if self.niFake_FunctionWithIntFlagParameter_cfunc is None: - self.niFake_FunctionWithIntFlagParameter_cfunc = self._get_library_function('niFake_FunctionWithIntFlagParameter') - self.niFake_FunctionWithIntFlagParameter_cfunc.argtypes = [ViSession, ViUInt64] # noqa: F405 - self.niFake_FunctionWithIntFlagParameter_cfunc.restype = ViStatus # noqa: F405 - return self.niFake_FunctionWithIntFlagParameter_cfunc(vi, flag) + if self.niFake_FunctionWithIntflagParameter_cfunc is None: + self.niFake_FunctionWithIntflagParameter_cfunc = self._get_library_function('niFake_FunctionWithIntflagParameter') + self.niFake_FunctionWithIntflagParameter_cfunc.argtypes = [ViSession, ViUInt64] # noqa: F405 + self.niFake_FunctionWithIntflagParameter_cfunc.restype = ViStatus # noqa: F405 + return self.niFake_FunctionWithIntflagParameter_cfunc(vi, flag) def niFake_FunctionWithRepeatedCapabilityType(self, vi, site_list): # noqa: N802 with self._func_lock: diff --git a/generated/nifake/nifake/_library_interpreter.py b/generated/nifake/nifake/_library_interpreter.py index 25b1a439f4..380a13954d 100644 --- a/generated/nifake/nifake/_library_interpreter.py +++ b/generated/nifake/nifake/_library_interpreter.py @@ -218,10 +218,10 @@ def fetch_waveform_into(self, waveform_data): # noqa: N802 errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False) return - def function_with_int_flag_parameter(self, flag): # noqa: N802 + def function_with_intflag_parameter(self, flag): # noqa: N802 vi_ctype = _visatype.ViSession(self._vi) # case S110 flag_ctype = _visatype.ViUInt64(flag.value) # case S130 - error_code = self._library.niFake_FunctionWithIntFlagParameter(vi_ctype, flag_ctype) + error_code = self._library.niFake_FunctionWithIntflagParameter(vi_ctype, flag_ctype) errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False) return diff --git a/generated/nifake/nifake/enums.py b/generated/nifake/nifake/enums.py index addfdb0203..40ac0fe6b1 100644 --- a/generated/nifake/nifake/enums.py +++ b/generated/nifake/nifake/enums.py @@ -63,7 +63,7 @@ class IntFlagEnum(IntFlag): r''' Flag B option. ''' - C = 4 + C = 9223372036854775808 r''' Flag C option. ''' diff --git a/generated/nifake/nifake/session.py b/generated/nifake/nifake/session.py index 2597606e09..5e88e6ce5b 100644 --- a/generated/nifake/nifake/session.py +++ b/generated/nifake/nifake/session.py @@ -946,8 +946,8 @@ def fetch_waveform_into(self, waveform_data): self._interpreter.fetch_waveform_into(waveform_data) @ivi_synchronized - def function_with_int_flag_parameter(self, flag): - r'''function_with_int_flag_parameter + def function_with_intflag_parameter(self, flag): + r'''function_with_intflag_parameter Calls a method that takes a flag parameter which can be OR'd from multiple enum values. @@ -957,7 +957,7 @@ def function_with_int_flag_parameter(self, flag): ''' if type(flag) is not enums.IntFlagEnum: raise TypeError('Parameter flag must be of type ' + str(enums.IntFlagEnum)) - self._interpreter.function_with_int_flag_parameter(flag) + self._interpreter.function_with_intflag_parameter(flag) @ivi_synchronized def get_a_boolean(self): diff --git a/generated/nifake/nifake/unit_tests/_mock_helper.py b/generated/nifake/nifake/unit_tests/_mock_helper.py index e8025b3e74..4bdda748fa 100644 --- a/generated/nifake/nifake/unit_tests/_mock_helper.py +++ b/generated/nifake/nifake/unit_tests/_mock_helper.py @@ -42,8 +42,8 @@ def __init__(self): self._defaults['FetchWaveform']['return'] = 0 self._defaults['FetchWaveform']['waveformData'] = None self._defaults['FetchWaveform']['actualNumberOfSamples'] = None - self._defaults['FunctionWithIntFlagParameter'] = {} - self._defaults['FunctionWithIntFlagParameter']['return'] = 0 + self._defaults['FunctionWithIntflagParameter'] = {} + self._defaults['FunctionWithIntflagParameter']['return'] = 0 self._defaults['FunctionWithRepeatedCapabilityType'] = {} self._defaults['FunctionWithRepeatedCapabilityType']['return'] = 0 self._defaults['GetABoolean'] = {} @@ -339,10 +339,10 @@ def niFake_FetchWaveform(self, vi, number_of_samples, waveform_data, actual_numb actual_number_of_samples.contents.value = self._defaults['FetchWaveform']['actualNumberOfSamples'] return self._defaults['FetchWaveform']['return'] - def niFake_FunctionWithIntFlagParameter(self, vi, flag): # noqa: N802 - if self._defaults['FunctionWithIntFlagParameter']['return'] != 0: - return self._defaults['FunctionWithIntFlagParameter']['return'] - return self._defaults['FunctionWithIntFlagParameter']['return'] + def niFake_FunctionWithIntflagParameter(self, vi, flag): # noqa: N802 + if self._defaults['FunctionWithIntflagParameter']['return'] != 0: + return self._defaults['FunctionWithIntflagParameter']['return'] + return self._defaults['FunctionWithIntflagParameter']['return'] def niFake_FunctionWithRepeatedCapabilityType(self, vi, site_list): # noqa: N802 if self._defaults['FunctionWithRepeatedCapabilityType']['return'] != 0: @@ -1043,8 +1043,8 @@ def set_side_effects_and_return_values(self, mock_library): mock_library.niFake_ExportAttributeConfigurationBuffer.return_value = 0 mock_library.niFake_FetchWaveform.side_effect = MockFunctionCallError("niFake_FetchWaveform") mock_library.niFake_FetchWaveform.return_value = 0 - mock_library.niFake_FunctionWithIntFlagParameter.side_effect = MockFunctionCallError("niFake_FunctionWithIntFlagParameter") - mock_library.niFake_FunctionWithIntFlagParameter.return_value = 0 + mock_library.niFake_FunctionWithIntflagParameter.side_effect = MockFunctionCallError("niFake_FunctionWithIntflagParameter") + mock_library.niFake_FunctionWithIntflagParameter.return_value = 0 mock_library.niFake_FunctionWithRepeatedCapabilityType.side_effect = MockFunctionCallError("niFake_FunctionWithRepeatedCapabilityType") mock_library.niFake_FunctionWithRepeatedCapabilityType.return_value = 0 mock_library.niFake_GetABoolean.side_effect = MockFunctionCallError("niFake_GetABoolean") diff --git a/generated/nifake/nifake/unit_tests/test_session.py b/generated/nifake/nifake/unit_tests/test_session.py index 61bb00dc11..03ecc85cc2 100644 --- a/generated/nifake/nifake/unit_tests/test_session.py +++ b/generated/nifake/nifake/unit_tests/test_session.py @@ -838,19 +838,21 @@ def test_return_timedeltas(self): assert returned_timedeltas == expected_timedeltas self.patched_library_interpreter.return_list_of_durations_in_seconds.assert_called_once_with(len(time_values)) - def test_function_with_int_flag_parameter_with_specific_flag(self): - flags = nifake.IntFlagEnum.C - self.patched_library_interpreter.function_with_int_flag_parameter.side_effect = None - self.patched_library_interpreter.function_with_int_flag_parameter.return_value = None + def test_with_valid_intflag_parameter(self): + flags = nifake.IntFlagEnum.C | nifake.IntFlagEnum.A + self.patched_library_interpreter.function_with_intflag_parameter.side_effect = None + self.patched_library_interpreter.function_with_intflag_parameter.return_value = None with nifake.Session('dev1') as session: - session.function_with_int_flag_parameter(flags) - self.patched_library_interpreter.function_with_int_flag_parameter.assert_called_once_with(flags) + session.function_with_intflag_parameter(flags) + self.patched_library_interpreter.function_with_intflag_parameter.assert_called_once_with(flags) + called_arg = self.patched_library_interpreter.function_with_intflag_parameter.call_args[0][0] + assert called_arg == 9223372036854775809 or (hasattr(called_arg, "value") and called_arg.value == 9223372036854775809) - def test_function_with_int_flag_parameter_invalid_type(self): - invalid_flag = "not_an_intflag" + def test_with_intflag_parameter_invalid(self): + invalid_flag = 5 with nifake.Session('dev1') as session: with pytest.raises(TypeError) as exc_info: - session.function_with_int_flag_parameter(invalid_flag) + session.function_with_intflag_parameter(invalid_flag) assert "Parameter flag must be of type" in str(exc_info.value) assert "IntFlagEnum" in str(exc_info.value) diff --git a/src/nifake/metadata/enums.py b/src/nifake/metadata/enums.py index db15fea383..0463980b54 100644 --- a/src/nifake/metadata/enums.py +++ b/src/nifake/metadata/enums.py @@ -262,7 +262,7 @@ 'description': 'Flag C option.' }, 'name': 'NIFAKE_VAL_FLAG_C', - 'value': 4 + 'value': 9223372036854775808 } ] }, diff --git a/src/nifake/metadata/functions.py b/src/nifake/metadata/functions.py index e3d2159c06..4ebff5b4e6 100644 --- a/src/nifake/metadata/functions.py +++ b/src/nifake/metadata/functions.py @@ -348,7 +348,7 @@ ], 'returns': 'ViStatus' }, - 'FunctionWithIntFlagParameter': { + 'FunctionWithIntflagParameter': { 'codegen_method': 'public', 'documentation': { 'description': "Calls a function that takes a flag parameter which can be OR'd from multiple enum values." diff --git a/src/nifake/unit_tests/test_session.py b/src/nifake/unit_tests/test_session.py index 61bb00dc11..03ecc85cc2 100644 --- a/src/nifake/unit_tests/test_session.py +++ b/src/nifake/unit_tests/test_session.py @@ -838,19 +838,21 @@ def test_return_timedeltas(self): assert returned_timedeltas == expected_timedeltas self.patched_library_interpreter.return_list_of_durations_in_seconds.assert_called_once_with(len(time_values)) - def test_function_with_int_flag_parameter_with_specific_flag(self): - flags = nifake.IntFlagEnum.C - self.patched_library_interpreter.function_with_int_flag_parameter.side_effect = None - self.patched_library_interpreter.function_with_int_flag_parameter.return_value = None + def test_with_valid_intflag_parameter(self): + flags = nifake.IntFlagEnum.C | nifake.IntFlagEnum.A + self.patched_library_interpreter.function_with_intflag_parameter.side_effect = None + self.patched_library_interpreter.function_with_intflag_parameter.return_value = None with nifake.Session('dev1') as session: - session.function_with_int_flag_parameter(flags) - self.patched_library_interpreter.function_with_int_flag_parameter.assert_called_once_with(flags) + session.function_with_intflag_parameter(flags) + self.patched_library_interpreter.function_with_intflag_parameter.assert_called_once_with(flags) + called_arg = self.patched_library_interpreter.function_with_intflag_parameter.call_args[0][0] + assert called_arg == 9223372036854775809 or (hasattr(called_arg, "value") and called_arg.value == 9223372036854775809) - def test_function_with_int_flag_parameter_invalid_type(self): - invalid_flag = "not_an_intflag" + def test_with_intflag_parameter_invalid(self): + invalid_flag = 5 with nifake.Session('dev1') as session: with pytest.raises(TypeError) as exc_info: - session.function_with_int_flag_parameter(invalid_flag) + session.function_with_intflag_parameter(invalid_flag) assert "Parameter flag must be of type" in str(exc_info.value) assert "IntFlagEnum" in str(exc_info.value) From 4808e1159236b73f1c27b2f760612a4ca7d02649 Mon Sep 17 00:00:00 2001 From: Rahul R Date: Mon, 14 Jul 2025 20:53:08 +0530 Subject: [PATCH 09/10] Including comment --- generated/nifake/nifake/unit_tests/test_session.py | 1 + src/nifake/unit_tests/test_session.py | 1 + 2 files changed, 2 insertions(+) diff --git a/generated/nifake/nifake/unit_tests/test_session.py b/generated/nifake/nifake/unit_tests/test_session.py index 03ecc85cc2..5f7abecbdc 100644 --- a/generated/nifake/nifake/unit_tests/test_session.py +++ b/generated/nifake/nifake/unit_tests/test_session.py @@ -846,6 +846,7 @@ def test_with_valid_intflag_parameter(self): session.function_with_intflag_parameter(flags) self.patched_library_interpreter.function_with_intflag_parameter.assert_called_once_with(flags) called_arg = self.patched_library_interpreter.function_with_intflag_parameter.call_args[0][0] + # Check if the called argument is an IntFlagEnum or its value with OR operation assert called_arg == 9223372036854775809 or (hasattr(called_arg, "value") and called_arg.value == 9223372036854775809) def test_with_intflag_parameter_invalid(self): diff --git a/src/nifake/unit_tests/test_session.py b/src/nifake/unit_tests/test_session.py index 03ecc85cc2..5f7abecbdc 100644 --- a/src/nifake/unit_tests/test_session.py +++ b/src/nifake/unit_tests/test_session.py @@ -846,6 +846,7 @@ def test_with_valid_intflag_parameter(self): session.function_with_intflag_parameter(flags) self.patched_library_interpreter.function_with_intflag_parameter.assert_called_once_with(flags) called_arg = self.patched_library_interpreter.function_with_intflag_parameter.call_args[0][0] + # Check if the called argument is an IntFlagEnum or its value with OR operation assert called_arg == 9223372036854775809 or (hasattr(called_arg, "value") and called_arg.value == 9223372036854775809) def test_with_intflag_parameter_invalid(self): From 70440b270db1c05aaf4b052745d86bbc031202c7 Mon Sep 17 00:00:00 2001 From: Rahul R Date: Mon, 14 Jul 2025 23:14:10 +0530 Subject: [PATCH 10/10] Updated test cases --- generated/nifake/nifake/unit_tests/test_session.py | 12 +++++------- src/nifake/unit_tests/test_session.py | 12 +++++------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/generated/nifake/nifake/unit_tests/test_session.py b/generated/nifake/nifake/unit_tests/test_session.py index 5f7abecbdc..17b6fd542c 100644 --- a/generated/nifake/nifake/unit_tests/test_session.py +++ b/generated/nifake/nifake/unit_tests/test_session.py @@ -844,18 +844,16 @@ def test_with_valid_intflag_parameter(self): self.patched_library_interpreter.function_with_intflag_parameter.return_value = None with nifake.Session('dev1') as session: session.function_with_intflag_parameter(flags) - self.patched_library_interpreter.function_with_intflag_parameter.assert_called_once_with(flags) - called_arg = self.patched_library_interpreter.function_with_intflag_parameter.call_args[0][0] - # Check if the called argument is an IntFlagEnum or its value with OR operation - assert called_arg == 9223372036854775809 or (hasattr(called_arg, "value") and called_arg.value == 9223372036854775809) + self.patched_library_interpreter.function_with_intflag_parameter.assert_called_once_with(9223372036854775809) def test_with_intflag_parameter_invalid(self): invalid_flag = 5 with nifake.Session('dev1') as session: - with pytest.raises(TypeError) as exc_info: + try: session.function_with_intflag_parameter(invalid_flag) - assert "Parameter flag must be of type" in str(exc_info.value) - assert "IntFlagEnum" in str(exc_info.value) + assert False + except TypeError: + pass def test_session_write_waveform_numpy_complex64_invalid_dtype(self): invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex128) diff --git a/src/nifake/unit_tests/test_session.py b/src/nifake/unit_tests/test_session.py index 5f7abecbdc..17b6fd542c 100644 --- a/src/nifake/unit_tests/test_session.py +++ b/src/nifake/unit_tests/test_session.py @@ -844,18 +844,16 @@ def test_with_valid_intflag_parameter(self): self.patched_library_interpreter.function_with_intflag_parameter.return_value = None with nifake.Session('dev1') as session: session.function_with_intflag_parameter(flags) - self.patched_library_interpreter.function_with_intflag_parameter.assert_called_once_with(flags) - called_arg = self.patched_library_interpreter.function_with_intflag_parameter.call_args[0][0] - # Check if the called argument is an IntFlagEnum or its value with OR operation - assert called_arg == 9223372036854775809 or (hasattr(called_arg, "value") and called_arg.value == 9223372036854775809) + self.patched_library_interpreter.function_with_intflag_parameter.assert_called_once_with(9223372036854775809) def test_with_intflag_parameter_invalid(self): invalid_flag = 5 with nifake.Session('dev1') as session: - with pytest.raises(TypeError) as exc_info: + try: session.function_with_intflag_parameter(invalid_flag) - assert "Parameter flag must be of type" in str(exc_info.value) - assert "IntFlagEnum" in str(exc_info.value) + assert False + except TypeError: + pass def test_session_write_waveform_numpy_complex64_invalid_dtype(self): invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex128)