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