From 29c891a5377618d5abd5734ff7f1f3abcbc569e0 Mon Sep 17 00:00:00 2001 From: Philip Makedonski <makedonski@informatik.uni-goettingen.de> Date: Tue, 30 Jun 2020 12:21:30 +0200 Subject: [PATCH] + migrated examples from TR --- tr-examples/configuration.tplan2 | 12 ++++ tr-examples/configuration.tplan2.tdl | 20 ++++++ tr-examples/configuration.tplan2.tdl.tdlan2 | 12 ++++ tr-examples/data.tplan2 | 9 +++ tr-examples/data.tplan2.tdl | 18 ++++++ tr-examples/data.tplan2.tdl.tdlan2 | 25 ++++++++ tr-examples/data_tables.tdlan2 | 25 ++++++++ tr-examples/descriptions.tdlan2 | 17 +++++ tr-examples/domain.tplan2 | 17 +++++ tr-examples/inferred_configuration.tdlan2 | 12 ++++ tr-examples/inferred_data.tdlan2 | 7 ++ tr-examples/objectives.tplan2 | 67 ++++++++++++++++++++ tr-examples/objectives.tplan2.docx | Bin 0 -> 11438 bytes 13 files changed, 241 insertions(+) create mode 100644 tr-examples/configuration.tplan2 create mode 100644 tr-examples/configuration.tplan2.tdl create mode 100644 tr-examples/configuration.tplan2.tdl.tdlan2 create mode 100644 tr-examples/data.tplan2 create mode 100644 tr-examples/data.tplan2.tdl create mode 100644 tr-examples/data.tplan2.tdl.tdlan2 create mode 100644 tr-examples/data_tables.tdlan2 create mode 100644 tr-examples/descriptions.tdlan2 create mode 100644 tr-examples/domain.tplan2 create mode 100644 tr-examples/inferred_configuration.tdlan2 create mode 100644 tr-examples/inferred_data.tdlan2 create mode 100644 tr-examples/objectives.tplan2 create mode 100644 tr-examples/objectives.tplan2.docx diff --git a/tr-examples/configuration.tplan2 b/tr-examples/configuration.tplan2 new file mode 100644 index 0000000..4181b83 --- /dev/null +++ b/tr-examples/configuration.tplan2 @@ -0,0 +1,12 @@ +Package base_configuration { + import all from data; + Configuration { + Interface Type wireless accepts position; + Component Type unit with gate wifi of type wireless; + Test Configuration basic containing + Tester component controller of type unit + SUT component object of type unit + connection between controller.wifi and object.wifi + ; + } +} \ No newline at end of file diff --git a/tr-examples/configuration.tplan2.tdl b/tr-examples/configuration.tplan2.tdl new file mode 100644 index 0000000..7d9486d --- /dev/null +++ b/tr-examples/configuration.tplan2.tdl @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<tdl:Package xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tdl="http://www.etsi.org/spec/TDL/1.4.1" name="base_configuration"> + <packagedElement xsi:type="tdl:GateType" name="wireless"> + <dataType xsi:type="tdl:StructuredDataType" href="data.tplan2.tdl.tdlan2#//@packagedElement.3"/> + </packagedElement> + <packagedElement xsi:type="tdl:ComponentType" name="unit"> + <gateInstance name="wifi" type="//@packagedElement.0"/> + </packagedElement> + <packagedElement xsi:type="tdl:TestConfiguration" name="basic"> + <componentInstance name="controller" type="//@packagedElement.1" role="Tester"/> + <componentInstance name="object" type="//@packagedElement.1"/> + <connection> + <endPoint component="//@packagedElement.2/@componentInstance.0" gate="//@packagedElement.1/@gateInstance.0"/> + <endPoint component="//@packagedElement.2/@componentInstance.1" gate="//@packagedElement.1/@gateInstance.0"/> + </connection> + </packagedElement> + <import> + <importedPackage href="data.tplan2.tdl.tdlan2#/"/> + </import> +</tdl:Package> diff --git a/tr-examples/configuration.tplan2.tdl.tdlan2 b/tr-examples/configuration.tplan2.tdl.tdlan2 new file mode 100644 index 0000000..a98be4c --- /dev/null +++ b/tr-examples/configuration.tplan2.tdl.tdlan2 @@ -0,0 +1,12 @@ +Package base_configuration { + Import all from data ; + Gate Type wireless accepts position ; + Component Type unit having { + gate wifi of type wireless ; + } + Test Configuration basic { + create Tester controller of type unit ; + create SUT object of type unit ; + connect controller.wifi to object.wifi ; + } +} \ No newline at end of file diff --git a/tr-examples/data.tplan2 b/tr-examples/data.tplan2 new file mode 100644 index 0000000..94d427d --- /dev/null +++ b/tr-examples/data.tplan2 @@ -0,0 +1,9 @@ +Package data { + Data { + type float; + type position with x of type float, y of type float; + float -22; + float -21; + position startingPosition containing x indicating value -21; + } +} \ No newline at end of file diff --git a/tr-examples/data.tplan2.tdl b/tr-examples/data.tplan2.tdl new file mode 100644 index 0000000..a65a259 --- /dev/null +++ b/tr-examples/data.tplan2.tdl @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<tdl:Package xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tdl="http://www.etsi.org/spec/TDL/1.4.1" name="data"> + <packagedElement xsi:type="tdl:SimpleDataType" name="integer"/> + <packagedElement xsi:type="tdl:SimpleDataType" name="string"/> + <packagedElement xsi:type="tdl:SimpleDataType" name="float"/> + <packagedElement xsi:type="tdl:StructuredDataType" name="position"> + <member name="x" dataType="//@packagedElement.2"/> + <member name="y" dataType="//@packagedElement.2"/> + </packagedElement> + <packagedElement xsi:type="tdl:StructuredDataInstance" name="startingPosition" dataType="//@packagedElement.3"> + <memberAssignment member="//@packagedElement.3/@member.0"> + <comment body="indicating value"/> + <memberSpec xsi:type="tdl:DataInstanceUse" dataInstance="//@packagedElement.6"/> + </memberAssignment> + </packagedElement> + <packagedElement xsi:type="tdl:SimpleDataInstance" name="-22" dataType="//@packagedElement.2"/> + <packagedElement xsi:type="tdl:SimpleDataInstance" name="-21" dataType="//@packagedElement.2"/> +</tdl:Package> diff --git a/tr-examples/data.tplan2.tdl.tdlan2 b/tr-examples/data.tplan2.tdl.tdlan2 new file mode 100644 index 0000000..ea2f2c4 --- /dev/null +++ b/tr-examples/data.tplan2.tdl.tdlan2 @@ -0,0 +1,25 @@ +/* +Copyright (c) ETSI 2020. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + +//Converted from data.tplan2 - same model, different representation +Package tdl_data { + Type integer ; + Type string ; + Type float ; + Type position ( x of type float , y of type float ) ; + position startingPosition ( x = -21 ) ; + float -22 ; + float -21 ; +} \ No newline at end of file diff --git a/tr-examples/data_tables.tdlan2 b/tr-examples/data_tables.tdlan2 new file mode 100644 index 0000000..4f94246 --- /dev/null +++ b/tr-examples/data_tables.tdlan2 @@ -0,0 +1,25 @@ +Package data_tables { + Import all from inferred_data; + Import all from inferred_configuration; + + inferred_position start_position(); + inferred_position open_position(); + inferred_position closed_position(); + inferred_position end_position(); + + Action move_to (position of type inferred_position); + + Test Description TC_MOVE_TO ( + target_position of type inferred_position + ) uses configuration inferred_move_object { + Controller.inferred_gate sends parameter target_position to Object.inferred_gate; + perform action move_to (position = parameter target_position) on Object; + } + + Test Description TC_MOVE_AROUND uses configuration inferred_move_object { + execute TC_MOVE_TO (target_position = start_position); + execute TC_MOVE_TO (target_position = open_position); + execute TC_MOVE_TO (target_position = closed_position); + execute TC_MOVE_TO (target_position = end_position); + } +} \ No newline at end of file diff --git a/tr-examples/descriptions.tdlan2 b/tr-examples/descriptions.tdlan2 new file mode 100644 index 0000000..ff3f10b --- /dev/null +++ b/tr-examples/descriptions.tdlan2 @@ -0,0 +1,17 @@ +Package descriptions { + Import all from inferred_configuration; + Import all from inferred_data; + + Action move_to (position of type inferred_position); + + Test Description TD_MOVE_OBJECT_LITERAL uses configuration inferred_move_object { + Controller.inferred_gate sends inferred_start_position to Object.inferred_gate; + perform action move_to (position = inferred_start_position) on Object; + } + + Test Description TD_MOVE_OBJECT_LITERAL_INLINE uses configuration inferred_move_object { + Controller.inferred_gate sends new inferred_position (x = 22, y = 21) to Object.inferred_gate; + perform action move_to (position = new inferred_position (x = 22, y = 21)) on Object; + } + +} \ No newline at end of file diff --git a/tr-examples/domain.tplan2 b/tr-examples/domain.tplan2 new file mode 100644 index 0000000..d09c81f --- /dev/null +++ b/tr-examples/domain.tplan2 @@ -0,0 +1,17 @@ +Package domain { + Domain { + pics : + - MOVABLE + ; + entities : + - Object + - Controller + ; + events : + - sends + - receives + - moves + - moves_to + ; + } +} \ No newline at end of file diff --git a/tr-examples/inferred_configuration.tdlan2 b/tr-examples/inferred_configuration.tdlan2 new file mode 100644 index 0000000..57b63d5 --- /dev/null +++ b/tr-examples/inferred_configuration.tdlan2 @@ -0,0 +1,12 @@ +Package inferred_configuration { + Import all from data ; + Gate Type inferred_gate_type accepts position ; + Component Type inferred_component_type having { + gate inferred_gate of type inferred_gate_type ; + } + Test Configuration inferred_move_object { + create Tester Controller of type inferred_component_type ; + create SUT Object of type inferred_component_type ; + connect Controller.inferred_gate to Object.inferred_gate ; + } +} \ No newline at end of file diff --git a/tr-examples/inferred_data.tdlan2 b/tr-examples/inferred_data.tdlan2 new file mode 100644 index 0000000..e52b887 --- /dev/null +++ b/tr-examples/inferred_data.tdlan2 @@ -0,0 +1,7 @@ +Package inferred_data { + Type inferred_simple ; + Type inferred_position ( x of type inferred_simple, y of type inferred_simple) ; + inferred_simple 22 ; + inferred_simple 21 ; + inferred_position inferred_start_position ( x = 22, y = 21 ) ; +} diff --git a/tr-examples/objectives.tplan2 b/tr-examples/objectives.tplan2 new file mode 100644 index 0000000..3a62fc7 --- /dev/null +++ b/tr-examples/objectives.tplan2 @@ -0,0 +1,67 @@ +/* +Copyright (c) ETSI 2020. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + +Package objectives { + import all from domain; + import all from data; + Test Purpose { + TP Id TP_MOVE_OBJECT_LITERAL + Test objective "Move object to destination with literal values." + PICS Selection MOVABLE + Expected behaviour + ensure that { + when { + the Controller entity sends the start position containing + x indicating value 22, + y indicating value 21 + ; + } then { + the Object entity moves_to the received start position + } + } + } + + Test Purpose { + TP Id TP_MOVE_OBJECT_PREDEFINED + Test objective "Move object to destination with predefined values." + Expected behaviour + ensure that { + when { + the Controller entity sends the (predefined) startingPosition containing + x indicating value -22, + y indicating value -21 + ; + } then { + the Object entity moves_to the (predefined) startingPosition + } + } + } + + Test Purpose { + TP Id TP_MOVE_OBJECT_TYPED + Test objective "Move object to destination with typed values." + Expected behaviour + ensure that { + when { + the Controller entity sends the (typed) starting position containing + x indicating value -22, + y indicating value -21 + ; + } then { + the Object entity moves_to the (typed) starting position + } + } + } +} \ No newline at end of file diff --git a/tr-examples/objectives.tplan2.docx b/tr-examples/objectives.tplan2.docx new file mode 100644 index 0000000000000000000000000000000000000000..2352df65865ad477372663175388897cf75f7c30 GIT binary patch literal 11438 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 literal 0 HcmV?d00001 -- GitLab