From 4d6ce6c94939e532e9f708091d17abd05c3f9ead Mon Sep 17 00:00:00 2001
From: Philip Makedonski <makedonski@informatik.uni-goettingen.de>
Date: Fri, 22 Dec 2023 14:11:37 +0100
Subject: [PATCH] + TR examples

---
 tr-examples/configuration.tplan2.tdltx        |  15 +++
 tr-examples/data.tplan2.tdltx                 |  16 ++++
 tr-examples/data_tables.tdlan2.tdltx          |  20 ++++
 tr-examples/descriptions.tdlan2.tdltx         |  33 +++++++
 tr-examples/domain.tplan2.tdltx               |  12 +++
 .../inferred_configuration.tdlan2.tdltx       |  12 +++
 tr-examples/inferred_data.tdlan2.tdltx        |  23 +++++
 tr-examples/objectives.tplan2.tdltx           |  87 ++++++++++++++++++
 tr-examples/objectives.tplan2.tdltx.tdltx     |  64 +++++++++++++
 .../objectives.tplan2.tdltx.tdltx.docx        | Bin 0 -> 11707 bytes
 10 files changed, 282 insertions(+)
 create mode 100644 tr-examples/configuration.tplan2.tdltx
 create mode 100644 tr-examples/data.tplan2.tdltx
 create mode 100644 tr-examples/data_tables.tdlan2.tdltx
 create mode 100644 tr-examples/descriptions.tdlan2.tdltx
 create mode 100644 tr-examples/domain.tplan2.tdltx
 create mode 100644 tr-examples/inferred_configuration.tdlan2.tdltx
 create mode 100644 tr-examples/inferred_data.tdlan2.tdltx
 create mode 100644 tr-examples/objectives.tplan2.tdltx
 create mode 100644 tr-examples/objectives.tplan2.tdltx.tdltx
 create mode 100644 tr-examples/objectives.tplan2.tdltx.tdltx.docx

diff --git a/tr-examples/configuration.tplan2.tdltx b/tr-examples/configuration.tplan2.tdltx
new file mode 100644
index 0000000..86fa3c1
--- /dev/null
+++ b/tr-examples/configuration.tplan2.tdltx
@@ -0,0 +1,15 @@
+Package base_configuration {
+    Import all from data
+    Annotation Final conditions
+    Annotation Expected behaviour
+    Annotation Initial conditions
+    Message Gate wireless accepts position
+    Component unit {
+        gate wireless wifi
+    }
+    Configuration basic {
+        unit controller as Tester,
+        unit object as SUT,
+        connect controller::wifi to object::wifi
+    }
+}
\ No newline at end of file
diff --git a/tr-examples/data.tplan2.tdltx b/tr-examples/data.tplan2.tdltx
new file mode 100644
index 0000000..00739be
--- /dev/null
+++ b/tr-examples/data.tplan2.tdltx
@@ -0,0 +1,16 @@
+Package data {
+    Annotation Final conditions
+    Annotation Expected behaviour
+    Annotation Initial conditions
+    Type float
+    Structure position (
+        float x,
+        float y
+    )
+    float _22
+    float _21
+    position startingPosition (
+        Note : "indicating value"
+        x = instance _21
+    )
+}
\ No newline at end of file
diff --git a/tr-examples/data_tables.tdlan2.tdltx b/tr-examples/data_tables.tdlan2.tdltx
new file mode 100644
index 0000000..c3a73a0
--- /dev/null
+++ b/tr-examples/data_tables.tdlan2.tdltx
@@ -0,0 +1,20 @@
+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 ( inferred_position position )
+    Test Description TC_MOVE_TO (
+    inferred_position target_position ) uses inferred_move_object {
+        Controller::inferred_gate sends parameter target_position to Object::inferred_gate
+        perform move_to ( position = parameter target_position ) on Object
+    }
+    Test Description TC_MOVE_AROUND uses inferred_move_object {
+        execute TC_MOVE_TO ( target_position = instance start_position )
+        execute TC_MOVE_TO ( target_position = instance open_position )
+        execute TC_MOVE_TO ( target_position = instance closed_position )
+        execute TC_MOVE_TO ( target_position = instance end_position )
+    }
+}
\ No newline at end of file
diff --git a/tr-examples/descriptions.tdlan2.tdltx b/tr-examples/descriptions.tdlan2.tdltx
new file mode 100644
index 0000000..b8b8877
--- /dev/null
+++ b/tr-examples/descriptions.tdlan2.tdltx
@@ -0,0 +1,33 @@
+/*
+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.
+*/
+
+//Inferred (manually) from objectives.tplan2
+Package descriptions {
+	Import all from inferred_configuration
+	Import all from inferred_data
+	
+	Action move_to ( inferred_position position)
+	
+	Test Description TD_MOVE_OBJECT_LITERAL uses inferred_move_object {
+		Controller::inferred_gate sends inferred_start_position to Object::inferred_gate
+		perform move_to ( position = inferred_start_position ) on Object
+	} 
+	
+	Test Description TD_MOVE_OBJECT_LITERAL_INLINE uses inferred_move_object {
+		Controller::inferred_gate sends new inferred_position (x = 22, y = 21) to Object::inferred_gate
+		perform 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.tdltx b/tr-examples/domain.tplan2.tdltx
new file mode 100644
index 0000000..942a81c
--- /dev/null
+++ b/tr-examples/domain.tplan2.tdltx
@@ -0,0 +1,12 @@
+Package domain {
+    Annotation Final conditions
+    Annotation Expected behaviour
+    Annotation Initial conditions
+    PICS MOVABLE
+    Entity Object
+    Entity Controller
+    Event sends
+    Event receives
+    Event moves
+    Event moves_to
+}
\ No newline at end of file
diff --git a/tr-examples/inferred_configuration.tdlan2.tdltx b/tr-examples/inferred_configuration.tdlan2.tdltx
new file mode 100644
index 0000000..13943ea
--- /dev/null
+++ b/tr-examples/inferred_configuration.tdlan2.tdltx
@@ -0,0 +1,12 @@
+Package inferred_configuration {
+    Import all from data
+    Message Gate inferred_gate_type accepts position
+    Component inferred_component_type {
+        gate inferred_gate_type inferred_gate
+    }
+    Configuration inferred_move_object {
+        inferred_component_type Controller as Tester,
+        inferred_component_type Object as SUT,
+        connect Controller::inferred_gate to Object::inferred_gate
+    }
+}
\ No newline at end of file
diff --git a/tr-examples/inferred_data.tdlan2.tdltx b/tr-examples/inferred_data.tdlan2.tdltx
new file mode 100644
index 0000000..573c27f
--- /dev/null
+++ b/tr-examples/inferred_data.tdlan2.tdltx
@@ -0,0 +1,23 @@
+/*
+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.
+*/
+
+//Inferred (manually) from objectives.tplan2
+Package inferred_data {
+	Type inferred_simple
+	Structure inferred_position ( inferred_simple x, inferred_simple y )
+	inferred_simple _22 
+	inferred_simple _21
+	inferred_position inferred_start_position ( x = 22, y = 21 )
+}
diff --git a/tr-examples/objectives.tplan2.tdltx b/tr-examples/objectives.tplan2.tdltx
new file mode 100644
index 0000000..7e4af0f
--- /dev/null
+++ b/tr-examples/objectives.tplan2.tdltx
@@ -0,0 +1,87 @@
+/*
+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.
+*/
+
+//Structured test objective specifications
+Package objectives {
+	Import all from Standard
+	Import all from data
+    Import all from domain
+    Import all from base_configuration
+    Test Purpose TP_MOVE_OBJECT_LITERAL {   
+        Objective: "Move object to destination with literal values."
+        PICS: 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_MOVE_OBJECT_PREDEFINED {
+        Objective: "Move object to destination with predefined values."
+        Expected behaviour 
+        ensure that {
+            when { 
+                the Controller entity sends the (predefined) instance startingPosition ( x = 21, y = 21) 
+            } then {
+                the Object entity moves_to the (predefined) instance startingPosition
+            } 
+        }
+    }
+
+//    Test Purpose TP_MOVE_OBJECT_TYPED {
+//        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
+//            } 
+//        }
+//    }
+
+Objective TO_MOVE_OBJECT_UNIFIED {
+    Description: "Move object to destination with unified test purpose description."
+}
+
+Test Purpose Description TP_MOVE_OBJECT_UNIFIED ( position startingPosition ) {
+    Objective: TO_MOVE_OBJECT_UNIFIED
+    Configuration: basic
+    Expected behaviour 
+    ensure that {
+        when { 
+            perform action: "the Controller sends the starting position" 
+            controller::wifi sends "x=21, y=21" to object::wifi
+            controller::wifi sends position (x = 21, y = 21) to object::wifi
+        } then {
+            perform action: "the Object moves to the requested position"
+            controller::wifi receives "x=21, y=21" from object::wifi
+            controller::wifi receives position (x = 21, y = 21) from object::wifi
+        } 
+    }
+}
+	
+
+}
\ No newline at end of file
diff --git a/tr-examples/objectives.tplan2.tdltx.tdltx b/tr-examples/objectives.tplan2.tdltx.tdltx
new file mode 100644
index 0000000..e164d0f
--- /dev/null
+++ b/tr-examples/objectives.tplan2.tdltx.tdltx
@@ -0,0 +1,64 @@
+Package objectives {
+    Import all from Standard
+    Import all from data
+    Import all from domain
+    Import all from base_configuration
+    Test Purpose TP_MOVE_OBJECT_LITERAL {
+        Objective: "Move object to destination with literal values."
+        PICS: 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_MOVE_OBJECT_PREDEFINED {
+        Objective: "Move object to destination with predefined values."
+        Expected behaviour
+        ensure that {
+            when {
+                    the Controller entity sends
+                    the
+                    (predefined) instance startingPosition (
+                        x = 21,
+                        y = 21
+                    )
+            } then {
+                    the Object entity moves_to
+                    the
+                    (predefined) instance startingPosition
+            } }
+    }
+    Objective TO_MOVE_OBJECT_UNIFIED {
+            Description: "Move object to destination with unified test purpose description."
+    }
+    Objective: TO_MOVE_OBJECT_UNIFIED
+    @Test Purpose Description
+    Test Description TP_MOVE_OBJECT_UNIFIED uses basic {
+        @Expected behaviour
+        {
+            @when
+            {
+                perform action : "the Controller sends the starting position"
+                controller::wifi sends "x=21, y=21" to object::wifi
+                controller::wifi sends position (
+                    x = 21,
+                    y = 21
+                ) to object::wifi
+            }
+            @then
+            {
+                perform action : "the Object moves to the requested position"
+                object::wifi sends "x=21, y=21" to controller::wifi
+                object::wifi sends position (
+                    x = 21,
+                    y = 21
+                ) to controller::wifi
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/tr-examples/objectives.tplan2.tdltx.tdltx.docx b/tr-examples/objectives.tplan2.tdltx.tdltx.docx
new file mode 100644
index 0000000000000000000000000000000000000000..2c137850432dc87fb54ce1063e8cb7bab6f6798c
GIT binary patch
literal 11707
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

literal 0
HcmV?d00001

-- 
GitLab