def test_add_component():
    data_under_test = FakeInstrument([])
    under_test = ComponentTreeModel(data_under_test)

    assert under_test.rowCount(QModelIndex()) == 0
    under_test.add_component(get_component())

    assert under_test.rowCount(QModelIndex()) == 1
def test_duplicate_component():
    data_under_test = Instrument(
        NexusWrapper("test_component_model_duplicate"), NX_CLASS_DEFINITIONS)
    under_test = ComponentTreeModel(data_under_test)

    assert under_test.rowCount(QModelIndex()) == 1  # Sample
    under_test.add_component(get_component())
    component_index = under_test.index(0, 0, QModelIndex())
    under_test.duplicate_node(component_index)
    assert under_test.rowCount(QModelIndex()) == 3
def test_add_transformation_alt_1():
    data_under_test = FakeInstrument([])
    under_test = ComponentTreeModel(data_under_test)

    under_test.add_component(get_component())
    component_index = under_test.index(0, 0, QModelIndex())
    transformation_list_index = under_test.index(1, 0, component_index)
    assert under_test.rowCount(transformation_list_index) == 0
    under_test.add_translation(transformation_list_index)
    assert under_test.rowCount(transformation_list_index) == 1
def test_add_link_alt_2():
    data_under_test = FakeInstrument([])
    under_test = ComponentTreeModel(data_under_test)

    under_test.add_component(get_component())
    component_index = under_test.index(0, 0, QModelIndex())
    transformation_list_index = under_test.index(1, 0, component_index)
    assert under_test.rowCount(transformation_list_index) == 0
    under_test.add_link(transformation_list_index)
    assert under_test.rowCount(transformation_list_index) == 1
    assert transformation_list_index.internalPointer().has_link
    assert len(transformation_list_index.internalPointer()) == 0
def test_add_translation():
    data_under_test = FakeInstrument([])
    under_test = ComponentTreeModel(data_under_test)

    under_test.add_component(get_component())
    component_index = under_test.index(0, 0, QModelIndex())
    transformation_list_index = under_test.index(1, 0, component_index)
    assert under_test.rowCount(transformation_list_index) == 0
    under_test.add_translation(component_index)
    assert under_test.rowCount(transformation_list_index) == 1
    transform_index = under_test.index(0, 0, transformation_list_index)
    assert transform_index.internalPointer().type == "Translation"
def test_duplicate_transform_fail():
    data_under_test = Instrument(
        NexusWrapper("test_component_model_duplicate_fail"),
        NX_CLASS_DEFINITIONS)
    under_test = ComponentTreeModel(data_under_test)

    under_test.add_component(get_component())
    component_index = under_test.index(0, 0, QModelIndex())
    under_test.add_rotation(component_index)
    transformation_list_index = under_test.index(1, 0, component_index)
    transformation_index = under_test.index(0, 0, transformation_list_index)
    try:
        under_test.duplicate_node(transformation_index)
    except (NotImplementedError, AttributeError):
        return  # Success
    assert False  # Failure