def test_unroll_formatting(): array = make_mock_twincatitem(name='enum_array', data_type=make_mock_type('MY_ENUM', is_enum=True, enum_dict={ 1: 'ONE', 2: 'TWO' }), pragma='pv: ENUMS\nexpand: _EXPAND%d', array_info=(1, 5)) def walk(condition=None): # Just the enum array yield [array] array.walk = walk records = { record.pvname: record for record in pragmas.record_packages_from_symbol(array) } assert set(records) == { 'ENUMS_EXPAND1', 'ENUMS_EXPAND2', 'ENUMS_EXPAND3', 'ENUMS_EXPAND4', }
def test_sub_io_change(dimensions, pragma, expected_records): outer = make_mock_twincatitem( name='Main.my_dut', data_type=make_mock_type('MY_DUT', is_complex_type=True), pragma='\n'.join(('pv: OUTER', pragma)), ) inner = make_mock_twincatitem( name='my_dut2', data_type=make_mock_type('MY_DUT2', is_complex_type=True), pragma='pv: INNER', array_info=dimensions, ) subsubitem1 = make_mock_twincatitem( name='item1', data_type=make_mock_type('INT'), pragma='\n'.join(('pv: item1', 'io: i')) ) def walk(condition=None): yield [outer, inner, subsubitem1] outer.walk = walk record_names = (record.pvname for pkg in pragmas.record_packages_from_symbol(outer) for record in pkg.records) assert set(record_names) == expected_records
def test_enum_array(): array = make_mock_twincatitem(name='enum_array', data_type=make_mock_type('MY_ENUM', is_enum=True, enum_dict={ 1: 'ONE', 2: 'TWO' }), pragma='pv: ENUMS', array_info=(1, 5)) def walk(condition=None): # Just the enum array yield [array] array.walk = walk records = { record.pvname: record for record in pragmas.record_packages_from_symbol(array) } assert set(records) == { 'ENUMS:01', 'ENUMS:02', 'ENUMS:03', 'ENUMS:04', } print(records) enum01 = records['ENUMS:01'] assert isinstance(enum01, EnumRecordPackage) assert enum01.field_defaults['ZRVL'] == 1 assert enum01.field_defaults['ZRST'] == "ONE" assert enum01.field_defaults['ONVL'] == 2 assert enum01.field_defaults['ONST'] == "TWO"
def test_scalar(): item = make_mock_twincatitem( name='Main.tcname', data_type=make_mock_type('DINT'), pragma='pv: PVNAME') record, = list(pragmas.record_packages_from_symbol(item)) assert record.pvname == 'PVNAME' assert record.tcname == 'Main.tcname' assert isinstance(record, IntegerRecordPackage)
def test_pv_linking(): item = make_mock_twincatitem( name='Main.tcname', data_type=make_mock_type('DINT'), pragma='pv: PVNAME; link: OTHER:RECORD') pkg, = list(pragmas.record_packages_from_symbol(item)) assert pkg.pvname == 'PVNAME' assert pkg.tcname == 'Main.tcname' assert isinstance(pkg, IntegerRecordPackage) rec = pkg.generate_output_record() assert rec.fields['OMSL'] == 'closed_loop' assert rec.fields['DOL'] == 'OTHER:RECORD CPP MS' assert rec.fields['SCAN'] == '.5 second'
def test_scalar(): item = make_mock_twincatitem(name='tcname', data_type=make_mock_type('DINT'), pragma='pv: PVNAME') def walk(condition=None): # Just one chain: yield [item] item.walk = walk record, = list(pragmas.record_packages_from_symbol(item)) assert record.pvname == 'PVNAME' assert record.tcname == 'tcname' assert isinstance(record, IntegerRecordPackage)
def test_pv_linking_special(): struct = make_mock_twincatitem( name='Main.array_base', data_type=make_mock_type('MY_DUT', is_complex_type=True), pragma='pv: PREFIX') subitem1 = make_mock_twincatitem( name='subitem1', data_type=make_mock_type('INT'), pragma='pv: ABCD; link: **ABCD.STAT') def walk(condition=None): yield [struct, subitem1] struct.walk = walk pkg, = list(pragmas.record_packages_from_symbol(struct)) rec = pkg.generate_output_record() assert rec.fields['DOL'] == 'PREFIX:ABCD.STAT CPP MS'
def test_unroll_formatting(): array = make_mock_twincatitem( name='Main.enum_array', data_type=make_mock_type('MY_ENUM', is_enum=True, enum_dict={1: 'ONE', 2: 'TWO'}), pragma='pv: ENUMS\nexpand: _EXPAND%d', array_info=(1, 4) ) records = { record.pvname: record for record in pragmas.record_packages_from_symbol(array) } assert set(records) == { 'ENUMS_EXPAND1', 'ENUMS_EXPAND2', 'ENUMS_EXPAND3', 'ENUMS_EXPAND4', }
def test_complex_array_partial(dimensions, pragma, expected_records): array = make_mock_twincatitem( name='Main.array_base', data_type=make_mock_type('MY_DUT', is_complex_type=True), pragma='\n'.join(('pv: ARRAY', pragma)), array_info=dimensions, ) subitem1 = make_mock_twincatitem( name='subitem1', data_type=make_mock_type('INT'), pragma='pv: subitem1') def walk(condition=None): yield [array, subitem1] array.walk = walk record_names = (record.pvname for record in pragmas.record_packages_from_symbol(array)) assert set(record_names) == expected_records
def test_complex_array(): array = make_mock_twincatitem(name='array_base', data_type=make_mock_type( 'MY_DUT', is_complex_type=True), pragma='pv: ARRAY', array_info=(1, 5)) subitem1 = make_mock_twincatitem(name='subitem1', data_type=make_mock_type('INT'), pragma='pv: subitem1') subitem2 = make_mock_twincatitem(name='subitem2', data_type=make_mock_type('REAL'), pragma='pv: subitem2\nio: i') def walk(condition=None): # Two chains, one for each array + subitem yield [array, subitem1] yield [array, subitem2] array.walk = walk records = { record.pvname: record for record in pragmas.record_packages_from_symbol(array) } assert set(records) == { 'ARRAY:01:subitem1', 'ARRAY:02:subitem1', 'ARRAY:03:subitem1', 'ARRAY:04:subitem1', 'ARRAY:01:subitem2', 'ARRAY:02:subitem2', 'ARRAY:03:subitem2', 'ARRAY:04:subitem2', } assert isinstance(records['ARRAY:01:subitem1'], IntegerRecordPackage) assert isinstance(records['ARRAY:01:subitem2'], FloatRecordPackage) assert records['ARRAY:01:subitem1'].io_direction == 'output' assert records['ARRAY:01:subitem2'].io_direction == 'input'