示例#1
0
def test_port_and_outcome_removal(caplog):
    container = ContainerState("Container")
    input_container_state = container.add_input_data_port("input", "float")
    output_container_state = container.add_output_data_port("output", "float")
    scoped_variable_container_state = container.add_scoped_variable(
        "scope", "float")

    assert len(container.transitions) == 0
    assert len(container.data_flows) == 0
    assert len(container.outcomes) == 3
    assert len(container.input_data_ports) == 1
    assert len(container.output_data_ports) == 1
    assert len(container.scoped_variables) == 1

    state1 = ExecutionState("test_execution_state")
    input_state1 = state1.add_input_data_port("input", "float")
    output_state1 = state1.add_output_data_port("output", "float")

    container.add_state(state1)
    container.add_transition(state1.state_id, 0, container.state_id, -2)
    container.add_data_flow(container.state_id, input_container_state,
                            state1.state_id, input_state1)
    container.add_data_flow(state1.state_id, output_state1, container.state_id,
                            output_container_state)
    container.add_data_flow(container.state_id, input_container_state,
                            container.state_id,
                            scoped_variable_container_state)

    assert len(container.transitions) == 1
    assert len(container.data_flows) == 3

    state1.remove_outcome(0)
    assert len(container.transitions) == 0

    state1.remove_output_data_port(output_state1)
    assert len(container.data_flows) == 2

    state1.remove_input_data_port(input_state1)
    assert len(container.data_flows) == 1

    container.remove_scoped_variable(scoped_variable_container_state)
    assert len(container.data_flows) == 0

    assert_logger_warnings_and_errors(caplog)
示例#2
0
def test_create_state(caplog):
    state1 = ExecutionState("MyFirstState")

    assert len(state1.outcomes) == 3

    out = state1.add_outcome("MyFirstOutcome", 3)

    assert len(state1.outcomes) == 4

    state1.remove_outcome(out)

    with raises(AttributeError):
        # AttributeError should be raised if income is to be removed
        state1.remove_income()

    with raises(AttributeError):
        # AttributeError should be raised if not existing outcome ID is to be removed
        state1.remove_outcome(out)
    with raises(AttributeError):
        # AttributeError should be raised if outcome preempted is to be removed
        state1.remove_outcome(-1)
    with raises(AttributeError):
        # AttributeError should be raised if outcome aborted is to be removed
        state1.remove_outcome(-2)

    assert len(state1.outcomes) == 3

    assert len(state1.input_data_ports) == 0
    assert len(state1.output_data_ports) == 0

    input_port_id = state1.add_input_data_port("input", "str")
    output_port_id = state1.add_output_data_port("output", "float")

    assert len(state1.input_data_ports) == 1
    assert len(state1.output_data_ports) == 1

    state1.remove_input_data_port(input_port_id)
    state1.remove_output_data_port(output_port_id)

    assert len(state1.input_data_ports) == 0
    assert len(state1.output_data_ports) == 0

    with raises(AttributeError):
        # AttributeError should be raised if not existing input is to be removed
        state1.remove_input_data_port(input_port_id)

    with raises(AttributeError):
        # AttributeError should be raised if not existing output is to be removed
        state1.remove_output_data_port(output_port_id)

    state2 = ExecutionState(name="State2", state_id=state1.state_id)

    # This should work, as data_type and default_value are optional parameters
    port = InputDataPort('input', data_port_id=99)

    with raises(AttributeError):
        # The name of the port differs in key and class member
        ExecutionState("test_execution_state",
                       input_data_ports={'diff_input': port})

    # UTF8 strings should be allowed at least for descriptions
    state1.description = u'My English is not v\xc3ry good'

    assert_logger_warnings_and_errors(caplog)

    a = ExecutionState("test", state_id=10)
    b = ExecutionState("test", state_id=10)

    assert a == b
    assert a is not b