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)
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