Ejemplo n.º 1
0
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',
    }
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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"
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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'
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
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'
Ejemplo n.º 8
0
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',
    }
Ejemplo n.º 9
0
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
Ejemplo n.º 10
0
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'