diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..26d33521af10bcc7fd8cea344038eaaeb78d0ef5
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..105ce2da2d6447d11dfe32bfb846c3d5b199fc99
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d1e22ecb89619a9c2dcf51a28d891a196d2462a0
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8a06bd9193c0ff24acc14b653d2d6b218f06279b
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/ngsi-ld-test-suite.iml b/.idea/ngsi-ld-test-suite.iml
new file mode 100644
index 0000000000000000000000000000000000000000..d0876a78d06ac03b5d78c8dcdb95570281c6f1d6
--- /dev/null
+++ b/.idea/ngsi-ld-test-suite.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..94a25f7f4cb416c083d265558da75d457237d671
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_01.robot b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_01.robot
new file mode 100644
index 0000000000000000000000000000000000000000..6f13b97220b15fc6390b9815648de38d565eada0
--- /dev/null
+++ b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_01.robot
@@ -0,0 +1,45 @@
+*** Settings ***
+Documentation Check that you can query context source registrations if at least one of list of Entity Types or list of Attribute names is present
+Resource ${EXECDIR}/resources/ApiUtils.resource
+Resource ${EXECDIR}/resources/AssertionUtils.resource
+Resource ${EXECDIR}/resources/JsonUtils.resource
+
+Test Template Query Context Source Registration
+Suite Setup Setup Initial Context Source Registrations
+Suite Teardown Delete Created Context Source Registrations
+
+*** Variable ***
+${context_source_registration_id_prefix}= urn:ngsi-ld:ContextSourceRegistration:
+${first_context_source_registration_payload_file_path}= csourceRegistrations/context-source-registration-sample.jsonld
+${second_context_source_registration_payload_file_path}= csourceRegistrations/context-source-registration-detailed-information-sample.jsonld
+
+*** Test Cases *** QUERY_PARAM_NAME QUERY_PARAM_VALUE EXPECTATION_FILE_PATH EXPECTED_CONTEXT_SOURCE_REGISTRATION_IDS
+With list of entity types type Building csourceRegistrations/expectations/context-source-registrations-037-01-expectation.json ${first_context_source_registration_id} ${second_context_source_registration_id}
+With list of attribute names attrs name csourceRegistrations/expectations/context-source-registrations-037-01-expectation.json ${second_context_source_registration_id}
+
+*** Keywords ***
+Query Context Source Registration
+ [Arguments] ${query_param_name} ${query_param_value} ${expectation_file_path} @{expected_context_source_registration_ids}
+ [Documentation] Check that you can query context source registrations if at least one of list of Entity Types or list of Attribute names is present
+ [Tags] mandatory
+
+ Query Context Source Registrations context=${ngsild_test_suite_context} ${query_param_name}=${query_param_value}
+
+ Check Response Status Code Set To 200
+ Check Response Body Containing List Containing Context Source Registrations elements ${expectation_file_path} ${expected_context_source_registration_ids}
+
+Setup Initial Context Source Registrations
+ ${first_context_source_registration_id}= Generate Random Entity Id ${context_source_registration_id_prefix}
+ ${second_context_source_registration_id}= Generate Random Entity Id ${context_source_registration_id_prefix}
+ ${first_context_source_registration_payload}= Load Test Sample ${first_context_source_registration_payload_file_path} ${first_context_source_registration_id}
+ ${second_context_source_registration_payload}= Load Test Sample ${second_context_source_registration_payload_file_path} ${second_context_source_registration_id}
+
+ Create Context Source Registration ${first_context_source_registration_payload}
+ Create Context Source Registration ${second_context_source_registration_payload}
+
+ Set Suite Variable ${first_context_source_registration_id}
+ Set Suite Variable ${second_context_source_registration_id}
+
+Delete Created Context Source Registrations
+ Delete Context Source Registration ${first_context_source_registration_id}
+ Delete Context Source Registration ${second_context_source_registration_id}
diff --git a/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_02.robot b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_02.robot
new file mode 100644
index 0000000000000000000000000000000000000000..99bee9233010c3fbe539d6c6039bddc434ec835e
--- /dev/null
+++ b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_02.robot
@@ -0,0 +1,16 @@
+*** Settings ***
+Documentation Check that you cannot query context source registrations, if neither Entity types nor Attribute names are provided, an error of type
+Resource ${EXECDIR}/resources/ApiUtils.resource
+Resource ${EXECDIR}/resources/AssertionUtils.resource
+Resource ${EXECDIR}/resources/JsonUtils.resource
+
+*** Test Case ***
+Query Context Source Registrations Without Entity Types and Attribute Names
+ [Documentation] Check that you cannot query context source registrations, if neither Entity types nor Attribute names are provided, an error of type
+ [Tags] mandatory
+
+ Query Context Source Registrations context=${ngsild_test_suite_context}
+
+ Check Response Status Code Set To 400
+ Check Response Body Containing ProblemDetails Element Containing Type Element set to ${response} ${ERROR_TYPE_BAD_REQUEST_DATA}
+ Check Response Body Containing ProblemDetails Element Containing Title Element ${response}
diff --git a/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_03.robot b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_03.robot
new file mode 100644
index 0000000000000000000000000000000000000000..8199b09fd1735135d26ca732c1cf651d8cb8bc51
--- /dev/null
+++ b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_03.robot
@@ -0,0 +1,25 @@
+*** Settings ***
+Documentation Check that you cannot query context source registrations, if the list of Entity identifiers includes a URI which it is not valid, or the query, geo-query or temporal query are not syntactically valid
+Resource ${EXECDIR}/resources/ApiUtils.resource
+Resource ${EXECDIR}/resources/AssertionUtils.resource
+Resource ${EXECDIR}/resources/JsonUtils.resource
+
+Test Template Query Context Source Registration With Invalid Query Param
+
+*** Test Cases *** QUERY_PARAM_NAME QUERY_PARAM_VALUE
+Invalid URI id invalidUri
+Invalid Query q invalidQuery
+Invalid GeoQuery georel within
+Invalid Temporal Query timerel before
+
+*** Keywords ***
+Query Context Source Registration With Invalid Query Param
+ [Arguments] ${query_param_name} ${query_param_value}
+ [Documentation] Check that you cannot query context source registrations, if the list of Entity identifiers includes a URI which it is not valid, or the query, geo-query or temporal query are not syntactically valid
+ [Tags] mandatory
+
+ Query Context Source Registrations context=${ngsild_test_suite_context} ${query_param_name}=${query_param_value}
+
+ Check Response Status Code Set To 400
+ Check Response Body Containing ProblemDetails Element Containing Type Element set to ${response} ${ERROR_TYPE_BAD_REQUEST_DATA}
+ Check Response Body Containing ProblemDetails Element Containing Title Element ${response}
diff --git a/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_04.robot b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_04.robot
new file mode 100644
index 0000000000000000000000000000000000000000..78dadc239614ad39713cdfcb8803bc10c3974db6
--- /dev/null
+++ b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_04.robot
@@ -0,0 +1,36 @@
+*** Settings ***
+Documentation Check that you can query context source registrations. If a JSON-LD context is not provided, then all the query terms shall be resolved against the default JSON-LD @context
+Resource ${EXECDIR}/resources/ApiUtils.resource
+Resource ${EXECDIR}/resources/AssertionUtils.resource
+Resource ${EXECDIR}/resources/JsonUtils.resource
+
+Suite Setup Setup Initial Context Source Registration
+Suite Teardown Delete Created Context Source Registration
+
+*** Variable ***
+${context_source_registration_id_prefix}= urn:ngsi-ld:ContextSourceRegistration:
+${context_source_registration_payload_file_path}= csourceRegistrations/context-source-registration-sample.jsonld
+${expectation_file_path}= csourceRegistrations/expectations/context-source-registrations-037-04-expectation.json
+
+*** Test Case ***
+Query Context Source Registrations Without Context
+ [Documentation] Check that you can query context source registrations. If a JSON-LD context is not provided, then all the query terms shall be resolved against the default JSON-LD @context
+ [Tags] mandatory
+
+ Query Context Source Registrations id=${context_source_registration_id}
+
+ @{expected_context_source_registration_ids}= Create List ${context_source_registration_id}
+ Check Response Status Code Set To 200
+ Check Response Body Containing List Containing Context Source Registrations elements ${expectation_file_path} ${expected_context_source_registration_ids}
+
+*** Keywords ***
+Setup Initial Context Source Registration
+ ${context_source_registration_id}= Generate Random Entity Id ${context_source_registration_id_prefix}
+ ${context_source_registration_payload}= Load Test Sample ${context_source_registration_payload_file_path} ${context_source_registration_id}
+
+ Create Context Source Registration ${context_source_registration_payload}
+
+ Set Suite Variable ${context_source_registration_id}
+
+Delete Created Context Source Registration
+ Delete Context Source Registration ${context_source_registration_id}
diff --git a/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_05.robot b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_05.robot
new file mode 100644
index 0000000000000000000000000000000000000000..399fa003bfc3ee1b1f31d9807f048079c6ec89d9
--- /dev/null
+++ b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_05.robot
@@ -0,0 +1,33 @@
+*** Settings ***
+Documentation Check that you can query context source registrations matching EntityInfo of RegistrationInfo
+Resource ${EXECDIR}/resources/ApiUtils.resource
+Resource ${EXECDIR}/resources/AssertionUtils.resource
+Resource ${EXECDIR}/resources/JsonUtils.resource
+
+Test Template Query Context Source Registration Matching EntityInfo of RegistrationInfo
+
+*** Variable ***
+${context_source_registration_id_prefix}= urn:ngsi-ld:ContextSourceRegistration:
+
+*** Test Cases *** REGISTRATION_FILE_PATH EXPECTATION_FILE_PATH
+Registration With EntityInfo Matching The Query csourceRegistrations/context-source-registration-sample.jsonld csourceRegistrations/expectations/context-source-registrations-037-05-01-expectation.json
+Registration Without EntityInfo csourceRegistrations/context-source-registration-with-only-properties-information-sample.jsonld csourceRegistrations/expectations/context-source-registrations-037-05-02-expectation.json
+
+*** Keywords ***
+Query Context Source Registration Matching EntityInfo of RegistrationInfo
+ [Arguments] ${registration_file_path} ${expectation_file_path}
+ [Documentation] Check that you can query context source registrations matching EntityInfo of RegistrationInfo
+ [Tags] mandatory
+
+ ${context_source_registration_id}= Generate Random Entity Id ${context_source_registration_id_prefix}
+ ${context_source_registration_payload}= Load Test Sample ${registration_file_path} ${context_source_registration_id}
+ Create Context Source Registration ${context_source_registration_payload}
+ Set Suite Variable ${context_source_registration_id}
+
+ Query Context Source Registrations context=${ngsild_test_suite_context} type=Building attrs=name
+
+ @{expected_context_source_registration_ids}= Create List ${context_source_registration_id}
+ Check Response Status Code Set To 200
+ Check Response Body Containing List Containing Context Source Registrations elements ${expectation_file_path} ${expected_context_source_registration_ids}
+
+ [Teardown] Delete Context Source Registration ${context_source_registration_id}
\ No newline at end of file
diff --git a/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_06.robot b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_06.robot
new file mode 100644
index 0000000000000000000000000000000000000000..97f252914125b2bf9af3f6fb7e5759c8af2e54d4
--- /dev/null
+++ b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_06.robot
@@ -0,0 +1,41 @@
+*** Settings ***
+Documentation Check that you can query context source registrations matching property and relationships names of RegistrationInfo
+Resource ${EXECDIR}/resources/ApiUtils.resource
+Resource ${EXECDIR}/resources/AssertionUtils.resource
+Resource ${EXECDIR}/resources/JsonUtils.resource
+
+Test Template Query Context Source Registration Matching Properties And Relationships Of RegistrationInfo
+Suite Setup Setup Initial Context Source Registration
+Suite Teardown Delete Created Context Source Registration
+
+*** Variable ***
+${context_source_registration_id_prefix}= urn:ngsi-ld:ContextSourceRegistration:
+${context_source_registration_payload_file_path}= csourceRegistrations/context-source-registration-detailed-information-sample.jsonld
+
+*** Test Cases *** ATTRS_VALUE EXPECTATION_FILE_PATH
+Query With Matching Properties And Relationships name,locatedAt csourceRegistrations/expectations/context-source-registrations-037-06-expectation.json
+Query Without Properties And Relationships ${EMPTY} csourceRegistrations/expectations/context-source-registrations-037-06-expectation.json
+
+*** Keywords ***
+Query Context Source Registration Matching Properties And Relationships Of RegistrationInfo
+ [Arguments] ${attrs_value} ${expectation_file_path}
+ [Documentation] Check that you can query context source registrations matching property and relationships names of RegistrationInfo
+ [Tags] mandatory
+
+ Query Context Source Registrations context=${ngsild_test_suite_context} type=Building attrs=${attrs_value}
+
+ @{expected_context_source_registration_ids}= Create List ${context_source_registration_id}
+ Check Response Status Code Set To 200
+ Check Response Body Containing List Containing Context Source Registrations elements ${expectation_file_path} ${expected_context_source_registration_ids}
+
+*** Keywords ***
+Setup Initial Context Source Registration
+ ${context_source_registration_id}= Generate Random Entity Id ${context_source_registration_id_prefix}
+ ${context_source_registration_payload}= Load Test Sample ${context_source_registration_payload_file_path} ${context_source_registration_id}
+
+ Create Context Source Registration ${context_source_registration_payload}
+
+ Set Suite Variable ${context_source_registration_id}
+
+Delete Created Context Source Registration
+ Delete Context Source Registration ${context_source_registration_id}
diff --git a/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_07.robot b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_07.robot
new file mode 100644
index 0000000000000000000000000000000000000000..efcd395227ee786b4981640525942d0cbf608527
--- /dev/null
+++ b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_07.robot
@@ -0,0 +1,41 @@
+*** Settings ***
+Documentation Check that you can query context source registrations. If present, the geoquery is matched against the GeoProperty identified in the geoquery
+Resource ${EXECDIR}/resources/ApiUtils.resource
+Resource ${EXECDIR}/resources/AssertionUtils.resource
+Resource ${EXECDIR}/resources/JsonUtils.resource
+
+Test Template Query Context Source Registration Matching Geoquery
+Suite Setup Setup Initial Context Source Registration
+Suite Teardown Delete Created Context Source Registration
+
+*** Variable ***
+${context_source_registration_id_prefix}= urn:ngsi-ld:ContextSourceRegistration:
+${context_source_registration_payload_file_path}= csourceRegistrations/context-source-registration-location-sample.jsonld
+${expectation_file_path}= csourceRegistrations/expectations/context-source-registrations-037-07-expectation.json
+
+*** Test Cases *** GEOREL GEOMETRY COORDINATES GEOPROPERTY EXPECTATION_FILE_PATH
+Near Point near;maxDistance==2000 Point [-8.503,41.202] ${EMPTY} ${expectation_file_path}
+Within Polygon within Polygon [[-13.503,47.202],[6.541, 52.961],[20.37,44.653],[9.46,32.57],[-15.23,21.37]] location ${expectation_file_path}
+
+*** Keywords ***
+Query Context Source Registration Matching Geoquery
+ [Arguments] ${georel} ${geometry} ${coordinates} ${geoproperty} ${expectation_file_path}
+ [Documentation] Check that you can query context source registrations. If present, the geoquery is matched against the GeoProperty identified in the geoquery
+ [Tags] mandatory
+
+ Query Context Source Registrations context=${ngsild_test_suite_context} type=Building georel=${georel} geometry=${geometry} coordinates=${coordinates} geoproperty=${geoproperty}
+
+ @{expected_context_source_registration_ids}= Create List ${context_source_registration_id}
+ Check Response Status Code Set To 200
+ Check Response Body Containing List Containing Context Source Registrations elements ${expectation_file_path} ${expected_context_source_registration_ids}
+
+Setup Initial Context Source Registration
+ ${context_source_registration_id}= Generate Random Entity Id ${context_source_registration_id_prefix}
+ ${context_source_registration_payload}= Load Test Sample ${context_source_registration_payload_file_path} ${context_source_registration_id}
+
+ Create Context Source Registration ${context_source_registration_payload}
+
+ Set Suite Variable ${context_source_registration_id}
+
+Delete Created Context Source Registration
+ Delete Context Source Registration ${context_source_registration_id}
diff --git a/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_08.robot b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_08.robot
new file mode 100644
index 0000000000000000000000000000000000000000..256d33933572d2c062625f59727834eb4f6ae1b5
--- /dev/null
+++ b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_08.robot
@@ -0,0 +1,36 @@
+*** Settings ***
+Documentation Check that you can query context source registrations. If no temporal query is present, only Context Source Registrations for Context Sources providing latest information are considered
+Resource ${EXECDIR}/resources/ApiUtils.resource
+Resource ${EXECDIR}/resources/AssertionUtils.resource
+Resource ${EXECDIR}/resources/JsonUtils.resource
+
+Suite Setup Setup Initial Context Source Registration
+Suite Teardown Delete Created Context Source Registration
+
+*** Variable ***
+${context_source_registration_id_prefix}= urn:ngsi-ld:ContextSourceRegistration:
+${context_source_registration_payload_file_path}= csourceRegistrations/context-source-registration-sample.jsonld
+${expectation_file_path}= csourceRegistrations/expectations/context-source-registrations-037-08-expectation.json
+
+*** Test Case ***
+Query Context Source Registration Without Temporal Query
+ [Documentation] Check that you can query context source registrations. If no temporal query is present, only Context Source Registrations for Context Sources providing latest information are considered
+ [Tags] mandatory
+
+ Query Context Source Registrations context=${ngsild_test_suite_context} type=Building
+
+ @{expected_context_source_registration_ids}= Create List ${context_source_registration_id}
+ Check Response Status Code Set To 200
+ Check Response Body Containing List Containing Context Source Registrations elements ${expectation_file_path} ${expected_context_source_registration_ids}
+
+*** Keywords ***
+Setup Initial Context Source Registration
+ ${context_source_registration_id}= Generate Random Entity Id ${context_source_registration_id_prefix}
+ ${context_source_registration_payload}= Load Test Sample ${context_source_registration_payload_file_path} ${context_source_registration_id}
+
+ Create Context Source Registration ${context_source_registration_payload}
+
+ Set Suite Variable ${context_source_registration_id}
+
+Delete Created Context Source Registration
+ Delete Context Source Registration ${context_source_registration_id}
diff --git a/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_09.robot b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_09.robot
new file mode 100644
index 0000000000000000000000000000000000000000..8b0f1f10d81d8a1e315ace27ad8dcacd757aaddb
--- /dev/null
+++ b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_09.robot
@@ -0,0 +1,39 @@
+*** Settings ***
+Documentation Check that you can query context source registrations. If present, the temporal query is matched against the observationInterval or the managementInterval
+Resource ${EXECDIR}/resources/ApiUtils.resource
+Resource ${EXECDIR}/resources/AssertionUtils.resource
+Resource ${EXECDIR}/resources/JsonUtils.resource
+
+Test Template Query Context Source Registration Matching Temporal Query
+
+*** Variable ***
+${context_source_registration_id_prefix}= urn:ngsi-ld:ContextSourceRegistration:
+${context_source_registration_observation_interval_payload_file_path}= csourceRegistrations/context-source-registration-observationInterval-sample.jsonld
+${context_source_registration_management_interval_payload_file_path}= csourceRegistrations/context-source-registration-managementInterval-sample.jsonld
+${observation_interval_expectation_file_path}= csourceRegistrations/expectations/context-source-registrations-037-09-01-expectation.json
+${management_interval_expectation_file_path}= csourceRegistrations/expectations/context-source-registrations-037-09-02-expectation.json
+
+*** Test Cases *** PAYLOAD_FILE_PATH TIMEPROPERTY EXPECTATION_FILE_PATH
+Observation Interval With observedAt ${context_source_registration_observation_interval_payload_file_path} observedAt ${observation_interval_expectation_file_path}
+Observation Interval Without timeproperty ${context_source_registration_observation_interval_payload_file_path} ${EMPTY} ${observation_interval_expectation_file_path}
+Mqnagement Interval With createdAt ${context_source_registration_management_interval_payload_file_path} createdAt ${management_interval_expectation_file_path}
+Mqnagement Interval With modifiedAt ${context_source_registration_management_interval_payload_file_path} modifiedAt ${management_interval_expectation_file_path}
+
+*** Keywords ***
+Query Context Source Registration Matching Temporal Query
+ [Arguments] ${payload_file_path} ${timeproperty} ${expectation_file_path}
+ [Documentation] Check that you can query context source registrations. If present, the temporal query is matched against the observationInterval or the managementInterval
+ [Tags] mandatory
+
+ ${context_source_registration_id}= Generate Random Entity Id ${context_source_registration_id_prefix}
+ ${context_source_registration_payload}= Load Test Sample ${payload_file_path} ${context_source_registration_id}
+ Create Context Source Registration ${context_source_registration_payload}
+ Set Suite Variable ${context_source_registration_id}
+
+ Query Context Source Registrations context=${ngsild_test_suite_context} type=Building timeproperty=${timeproperty} timerel=before timeAt=2021-08-01T22:00:00Z
+
+ @{expected_context_source_registration_ids}= Create List ${context_source_registration_id}
+ Check Response Status Code Set To 200
+ Check Response Body Containing List Containing Context Source Registrations elements ${expectation_file_path} ${expected_context_source_registration_ids}
+
+ [Teardown] Delete Context Source Registration ${context_source_registration_id}
diff --git a/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_11.robot b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_11.robot
new file mode 100644
index 0000000000000000000000000000000000000000..ee83a7d74c01b91bf169f184e2dac0e3bbe15706
--- /dev/null
+++ b/TP/NGSI-LD/ContextSource/Registration/QueryContextSourceRegistrations/037_11.robot
@@ -0,0 +1,53 @@
+*** Settings ***
+Documentation Check that you can query context source registrations with providing page and limit parameters, pagination logic shall be in place as mandated by clause 5.5.9.
+Resource ${EXECDIR}/resources/ApiUtils.resource
+Resource ${EXECDIR}/resources/AssertionUtils.resource
+Resource ${EXECDIR}/resources/JsonUtils.resource
+
+Test Template Query Context Source Registration With Limit And Page Parameters
+Suite Setup Setup Initial Context Source Registrations
+Suite Teardown Delete Created Context Source Registrations
+
+*** Variable ***
+${context_source_registration_id_prefix}= urn:ngsi-ld:ContextSourceRegistration:
+${first_context_source_registration_payload_file_path}= csourceRegistrations/context-source-registration-sample.jsonld
+${second_context_source_registration_payload_file_path}= csourceRegistrations/context-source-registration-location-sample.jsonld
+${third_context_source_registration_payload_file_path}= csourceRegistrations/context-source-registration-detailed-information-sample.jsonld
+
+*** Test Cases *** LIMIT PAGE EXPECTED_NUMBER PREV_LINK NEXT_LINK
+Query Second Subscription ${1} ${2} ${1} ;rel="prev";type="application/ld+json" ;rel="next";type="application/ld+json"
+Query Last Subscription ${2} ${2} ${1} ;rel="prev";type="application/ld+json" ${EMPTY}
+Query All Subscriptions ${15} ${1} ${3} ${EMPTY} ${EMPTY}
+
+*** Keywords ***
+Query Context Source Registration With Limit And Page Parameters
+ [Arguments] ${limit} ${page} ${expected_number} ${prev_link} ${next_link}
+ [Documentation] Check that you can query context source registrations with providing page and limit parameters, pagination logic shall be in place as mandated by clause 5.5.9.
+ [Tags] mandatory
+
+ Query Context Source Registrations context=${ngsild_test_suite_context} type=Building limit=${limit} page=${page}
+
+ Check Response Status Code Set To 200
+ Check Response Body Containing Number Of Entities ContextSourceRegistration ${expected_number}
+ Check Pagination Prev And Next Headers ${prev_link} ${next_link}
+
+Setup Initial Context Source Registrations
+ ${first_context_source_registration_id}= Generate Random Entity Id ${context_source_registration_id_prefix}
+ ${second_context_source_registration_id}= Generate Random Entity Id ${context_source_registration_id_prefix}
+ ${third_context_source_registration_id}= Generate Random Entity Id ${context_source_registration_id_prefix}
+ ${first_context_source_registration_payload}= Load Test Sample ${first_context_source_registration_payload_file_path} ${first_context_source_registration_id}
+ ${second_context_source_registration_payload}= Load Test Sample ${second_context_source_registration_payload_file_path} ${second_context_source_registration_id}
+ ${third_context_source_registration_payload}= Load Test Sample ${third_context_source_registration_payload_file_path} ${third_context_source_registration_id}
+
+ Create Context Source Registration ${first_context_source_registration_payload}
+ Create Context Source Registration ${second_context_source_registration_payload}
+ Create Context Source Registration ${third_context_source_registration_payload}
+
+ Set Suite Variable ${first_context_source_registration_id}
+ Set Suite Variable ${second_context_source_registration_id}
+ Set Suite Variable ${third_context_source_registration_id}
+
+Delete Created Context Source Registrations
+ Delete Context Source Registration ${first_context_source_registration_id}
+ Delete Context Source Registration ${second_context_source_registration_id}
+ Delete Context Source Registration ${third_context_source_registration_id}
diff --git a/data/csourceRegistrations/context-source-registration-with-only-properties-information-sample.jsonld b/data/csourceRegistrations/context-source-registration-with-only-properties-information-sample.jsonld
new file mode 100644
index 0000000000000000000000000000000000000000..71583c3577e35b1efcd36a4dbd94e8be8e0f5a03
--- /dev/null
+++ b/data/csourceRegistrations/context-source-registration-with-only-properties-information-sample.jsonld
@@ -0,0 +1,14 @@
+{
+ "id":"urn:ngsi-ld:ContextSourceRegistration:randomUUID",
+ "type":"ContextSourceRegistration",
+ "information":[
+ {
+ "propertyNames":["name", "subCategory"]
+ }
+ ],
+ "endpoint":"http://my.csource.org:1026",
+ "@context":[
+ "https://raw.githubusercontent.com/easy-global-market/ngsild-api-data-models/feature/add-json-ld-context-for-ngsi-ld-test-suite/ngsi-ld-test-suite/ngsi-ld-test-suite-context.jsonld",
+ "https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context.jsonld"
+ ]
+}
\ No newline at end of file
diff --git a/data/csourceRegistrations/expectations/context-source-registrations-037-01-expectation.json b/data/csourceRegistrations/expectations/context-source-registrations-037-01-expectation.json
new file mode 100644
index 0000000000000000000000000000000000000000..b8d0242e3ecdc250d2797b0dbda9dd6d18d54bb5
--- /dev/null
+++ b/data/csourceRegistrations/expectations/context-source-registrations-037-01-expectation.json
@@ -0,0 +1,37 @@
+[
+ {
+ "id":"urn:ngsi-ld:ContextSourceRegistration:randomUUID",
+ "type":"ContextSourceRegistration",
+ "information":[
+ {
+ "entities":[
+ {
+ "type":"Building"
+ }
+ ]
+ }
+ ],
+ "endpoint":"http://my.csource.org:1026"
+ },
+ {
+ "id":"urn:ngsi-ld:ContextSourceRegistration:randomUUID",
+ "type":"ContextSourceRegistration",
+ "information":[
+ {
+ "entities":[
+ {
+ "type":"Building"
+ }
+ ],
+ "propertyNames":[
+ "name",
+ "subCategory"
+ ],
+ "relationshipNames":[
+ "locatedAt"
+ ]
+ }
+ ],
+ "endpoint":"http://my.csource.org:1026"
+ }
+]
\ No newline at end of file
diff --git a/data/csourceRegistrations/expectations/context-source-registrations-037-04-expectation.json b/data/csourceRegistrations/expectations/context-source-registrations-037-04-expectation.json
new file mode 100644
index 0000000000000000000000000000000000000000..46ec3a76fcf8089aceb1bed258e497617b8a2038
--- /dev/null
+++ b/data/csourceRegistrations/expectations/context-source-registrations-037-04-expectation.json
@@ -0,0 +1,16 @@
+[
+ {
+ "id":"urn:ngsi-ld:ContextSourceRegistration:randomUUID",
+ "type":"ContextSourceRegistration",
+ "information":[
+ {
+ "entities":[
+ {
+ "type":"https://ngsi-ld-test-suite/context#Building"
+ }
+ ]
+ }
+ ],
+ "endpoint":"http://my.csource.org:1026"
+ }
+]
\ No newline at end of file
diff --git a/data/csourceRegistrations/expectations/context-source-registrations-037-05-01-expectation.json b/data/csourceRegistrations/expectations/context-source-registrations-037-05-01-expectation.json
new file mode 100644
index 0000000000000000000000000000000000000000..0ddd335ca69f8484aa28852e8b385235cb7b08d3
--- /dev/null
+++ b/data/csourceRegistrations/expectations/context-source-registrations-037-05-01-expectation.json
@@ -0,0 +1,16 @@
+[
+ {
+ "id":"urn:ngsi-ld:ContextSourceRegistration:randomUUID",
+ "type":"ContextSourceRegistration",
+ "information":[
+ {
+ "entities":[
+ {
+ "type":"Building"
+ }
+ ]
+ }
+ ],
+ "endpoint":"http://my.csource.org:1026"
+ }
+]
\ No newline at end of file
diff --git a/data/csourceRegistrations/expectations/context-source-registrations-037-05-02-expectation.json b/data/csourceRegistrations/expectations/context-source-registrations-037-05-02-expectation.json
new file mode 100644
index 0000000000000000000000000000000000000000..51faeabc320ba3587dcef25713c91c85ca763e02
--- /dev/null
+++ b/data/csourceRegistrations/expectations/context-source-registrations-037-05-02-expectation.json
@@ -0,0 +1,12 @@
+[
+ {
+ "id":"urn:ngsi-ld:ContextSourceRegistration:randomUUID",
+ "type":"ContextSourceRegistration",
+ "information":[
+ {
+ "propertyNames":["name", "subCategory"]
+ }
+ ],
+ "endpoint":"http://my.csource.org:1026"
+ }
+]
\ No newline at end of file
diff --git a/data/csourceRegistrations/expectations/context-source-registrations-037-06-expectation.json b/data/csourceRegistrations/expectations/context-source-registrations-037-06-expectation.json
new file mode 100644
index 0000000000000000000000000000000000000000..baa1c66e89192e287d213340e4e65cc47c91d497
--- /dev/null
+++ b/data/csourceRegistrations/expectations/context-source-registrations-037-06-expectation.json
@@ -0,0 +1,18 @@
+[
+ {
+ "id":"urn:ngsi-ld:ContextSourceRegistration:randomUUID",
+ "type":"ContextSourceRegistration",
+ "information":[
+ {
+ "entities":[
+ {
+ "type":"Building"
+ }
+ ],
+ "propertyNames":["name", "subCategory"],
+ "relationshipNames":["locatedAt"]
+ }
+ ],
+ "endpoint":"http://my.csource.org:1026"
+ }
+]
\ No newline at end of file
diff --git a/data/csourceRegistrations/expectations/context-source-registrations-037-07-expectation.json b/data/csourceRegistrations/expectations/context-source-registrations-037-07-expectation.json
new file mode 100644
index 0000000000000000000000000000000000000000..51487e5aab3a43d87d7424d531f493e14ba4041f
--- /dev/null
+++ b/data/csourceRegistrations/expectations/context-source-registrations-037-07-expectation.json
@@ -0,0 +1,26 @@
+[
+ {
+ "id":"urn:ngsi-ld:ContextSourceRegistration:randomUUID",
+ "type":"ContextSourceRegistration",
+ "information":[
+ {
+ "entities":[
+ {
+ "type":"Building"
+ }
+ ]
+ }
+ ],
+ "location":{
+ "type":"GeoProperty",
+ "value":{
+ "type":"Point",
+ "coordinates":[
+ -8.521,
+ 41.2
+ ]
+ }
+ },
+ "endpoint":"http://my.csource.org:1026"
+ }
+]
\ No newline at end of file
diff --git a/data/csourceRegistrations/expectations/context-source-registrations-037-08-expectation.json b/data/csourceRegistrations/expectations/context-source-registrations-037-08-expectation.json
new file mode 100644
index 0000000000000000000000000000000000000000..0ddd335ca69f8484aa28852e8b385235cb7b08d3
--- /dev/null
+++ b/data/csourceRegistrations/expectations/context-source-registrations-037-08-expectation.json
@@ -0,0 +1,16 @@
+[
+ {
+ "id":"urn:ngsi-ld:ContextSourceRegistration:randomUUID",
+ "type":"ContextSourceRegistration",
+ "information":[
+ {
+ "entities":[
+ {
+ "type":"Building"
+ }
+ ]
+ }
+ ],
+ "endpoint":"http://my.csource.org:1026"
+ }
+]
\ No newline at end of file
diff --git a/data/csourceRegistrations/expectations/context-source-registrations-037-09-01-expectation.json b/data/csourceRegistrations/expectations/context-source-registrations-037-09-01-expectation.json
new file mode 100644
index 0000000000000000000000000000000000000000..1312004a07dd06e52f1d72ea100629a7a175b640
--- /dev/null
+++ b/data/csourceRegistrations/expectations/context-source-registrations-037-09-01-expectation.json
@@ -0,0 +1,20 @@
+[
+ {
+ "id":"urn:ngsi-ld:ContextSourceRegistration:randomUUID",
+ "type":"ContextSourceRegistration",
+ "information":[
+ {
+ "entities":[
+ {
+ "type":"Building"
+ }
+ ]
+ }
+ ],
+ "observationInterval":{
+ "startAt":"2020-08-01T22:07:00Z",
+ "endAt":"2021-08-01T21:07:00Z"
+ },
+ "endpoint":"http://my.csource.org:1026"
+ }
+]
\ No newline at end of file
diff --git a/data/csourceRegistrations/expectations/context-source-registrations-037-09-02-expectation.json b/data/csourceRegistrations/expectations/context-source-registrations-037-09-02-expectation.json
new file mode 100644
index 0000000000000000000000000000000000000000..cb0ab1fe6188db83e637bd898c25dbc7c7f1987e
--- /dev/null
+++ b/data/csourceRegistrations/expectations/context-source-registrations-037-09-02-expectation.json
@@ -0,0 +1,20 @@
+[
+ {
+ "id":"urn:ngsi-ld:ContextSourceRegistration:randomUUID",
+ "type":"ContextSourceRegistration",
+ "information":[
+ {
+ "entities":[
+ {
+ "type":"Building"
+ }
+ ]
+ }
+ ],
+ "managementInterval":{
+ "startAt":"2020-08-01T22:07:00Z",
+ "endAt":"2021-08-01T21:07:00Z"
+ },
+ "endpoint":"http://my.csource.org:1026"
+ }
+]
\ No newline at end of file
diff --git a/resources/ApiUtils.resource b/resources/ApiUtils.resource
index 6246a66629811d9a92a1c7a0b173c0104c9282d0..15cc86db2945dbe232617cdcac2a9f46bcd47544 100755
--- a/resources/ApiUtils.resource
+++ b/resources/ApiUtils.resource
@@ -431,6 +431,32 @@ Update Context Source Registration
Set Test Variable ${response}
+Query Context Source Registrations
+ [Arguments] ${context}=${EMPTY} ${id}=${EMPTY} ${type}=${EMPTY} ${attrs}=${EMPTY} ${q}=${EMPTY} ${georel}=${EMPTY} ${geometry}=${EMPTY} ${coordinates}=${EMPTY} ${geoproperty}=${EMPTY} ${timeproperty}=${EMPTY} ${timerel}=${EMPTY} ${timeAt}=${EMPTY} ${limit}=${EMPTY} ${page}=${EMPTY}
+
+ &{headers}= Create Dictionary
+ &{params}= Create Dictionary
+ Run Keyword If '${context}'!='' Set To Dictionary ${headers} Link=<${context}>; rel="http://www.w3.org/ns/json-ld#context";type="application/ld+json"
+ Run Keyword If '${id}'!='' Set To Dictionary ${params} id=${id}
+ Run Keyword If '${type}'!='' Set To Dictionary ${params} type=${type}
+ Run Keyword If '${attrs}'!='' Set To Dictionary ${params} attrs=${attrs}
+ Run Keyword If '${q}'!='' Set To Dictionary ${params} q=${q}
+ Run Keyword If '${georel}'!='' Set To Dictionary ${params} georel=${georel}
+ Run Keyword If '${geometry}'!='' Set To Dictionary ${params} geometry=${geometry}
+ Run Keyword If '${coordinates}'!='' Set To Dictionary ${params} coordinates=${coordinates}
+ Run Keyword If '${geoproperty}'!='' Set To Dictionary ${params} geoproperty=${geoproperty}
+ Run Keyword If '${timeproperty}'!='' Set To Dictionary ${params} timeproperty=${timeproperty}
+ Run Keyword If '${timerel}'!='' Set To Dictionary ${params} timerel=${timerel}
+ Run Keyword If '${timeAt}'!='' Set To Dictionary ${params} timeAt=${timeAt}
+ Run Keyword If '${limit}'!='' Set To Dictionary ${params} limit=${limit}
+ Run Keyword If '${page}'!='' Set To Dictionary ${params} page=${page}
+
+ ${response}= GET ${CONTEXT_SOURCE_REGISTRATION_ENDPOINT_PATH} headers=${headers} query=${params}
+ Output request
+ Output response
+
+ Set Test Variable ${response}
+
Delete Context Source Registration
[Arguments] ${context_source_registration_id}
diff --git a/resources/AssertionUtils.resource b/resources/AssertionUtils.resource
index 2116fcfbe9b5597b1b4b8d8862c380798921cbdd..c75596b9723d59f4a76335befeea1ff42f6ef852 100755
--- a/resources/AssertionUtils.resource
+++ b/resources/AssertionUtils.resource
@@ -194,6 +194,17 @@ Check Response Body Containing Attribute element
${comparison_result}= Compare Dictionaries Ignoring Keys ${response['body']} ${attribute_payload} ${ignored_keys}
Should Be True ${comparison_result} msg=Attribute Comparison Failed
+Check Response Body Containing List Containing Context Source Registrations elements
+ [Arguments] ${expectation_file_path} ${expected_context_source_registrations_ids}
+ ${expected_context_source_registrations_payload}= Load Json From File ${EXECDIR}/data/${expectation_file_path}
+ ${index}= Set Variable 0
+ FOR ${expected_context_source_registration_id} IN @{expected_context_source_registrations_ids}
+ ${expected_context_source_registrations_payload}= Update Value To Json ${expected_context_source_registrations_payload} $.[${index}]..id ${expected_context_source_registration_id}
+ ${index}= Evaluate ${index} + 1
+ END
+ ${comparaison_result}= Compare Dictionaries Ignoring Keys ${response['body']} ${expected_context_source_registrations_payload} ${EMPTY}
+ Should Be True ${comparaison_result} msg=Context Source Registration Comparaison Failed
+
Check Response Body Type When Using Session Request
[Arguments] ${response} ${type}
Should Be Equal ${response['type']} ${type}
diff --git a/robot/bin/activate b/robot/bin/activate
new file mode 100644
index 0000000000000000000000000000000000000000..20ba13d8e4d392885aeaf8cbeca83650628862c8
--- /dev/null
+++ b/robot/bin/activate
@@ -0,0 +1,84 @@
+# This file must be used with "source bin/activate" *from bash*
+# you cannot run it directly
+
+
+if [ "${BASH_SOURCE-}" = "$0" ]; then
+ echo "You must source this script: \$ source $0" >&2
+ exit 33
+fi
+
+deactivate () {
+ unset -f pydoc >/dev/null 2>&1
+
+ # reset old environment variables
+ # ! [ -z ${VAR+_} ] returns true if VAR is declared at all
+ if ! [ -z "${_OLD_VIRTUAL_PATH:+_}" ] ; then
+ PATH="$_OLD_VIRTUAL_PATH"
+ export PATH
+ unset _OLD_VIRTUAL_PATH
+ fi
+ if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then
+ PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME"
+ export PYTHONHOME
+ unset _OLD_VIRTUAL_PYTHONHOME
+ fi
+
+ # This should detect bash and zsh, which have a hash command that must
+ # be called to get it to forget past commands. Without forgetting
+ # past commands the $PATH changes we made may not be respected
+ if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
+ hash -r 2>/dev/null
+ fi
+
+ if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then
+ PS1="$_OLD_VIRTUAL_PS1"
+ export PS1
+ unset _OLD_VIRTUAL_PS1
+ fi
+
+ unset VIRTUAL_ENV
+ if [ ! "${1-}" = "nondestructive" ] ; then
+ # Self destruct!
+ unset -f deactivate
+ fi
+}
+
+# unset irrelevant variables
+deactivate nondestructive
+
+VIRTUAL_ENV='/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot'
+export VIRTUAL_ENV
+
+_OLD_VIRTUAL_PATH="$PATH"
+PATH="$VIRTUAL_ENV/bin:$PATH"
+export PATH
+
+# unset PYTHONHOME if set
+if ! [ -z "${PYTHONHOME+_}" ] ; then
+ _OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME"
+ unset PYTHONHOME
+fi
+
+if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
+ _OLD_VIRTUAL_PS1="${PS1-}"
+ if [ "x" != x ] ; then
+ PS1="${PS1-}"
+ else
+ PS1="(`basename \"$VIRTUAL_ENV\"`) ${PS1-}"
+ fi
+ export PS1
+fi
+
+# Make sure to unalias pydoc if it's already there
+alias pydoc 2>/dev/null >/dev/null && unalias pydoc || true
+
+pydoc () {
+ python -m pydoc "$@"
+}
+
+# This should detect bash and zsh, which have a hash command that must
+# be called to get it to forget past commands. Without forgetting
+# past commands the $PATH changes we made may not be respected
+if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
+ hash -r 2>/dev/null
+fi
diff --git a/robot/bin/activate.csh b/robot/bin/activate.csh
new file mode 100644
index 0000000000000000000000000000000000000000..278c109309baf943b61c07311ad9dc5583f16bef
--- /dev/null
+++ b/robot/bin/activate.csh
@@ -0,0 +1,55 @@
+# This file must be used with "source bin/activate.csh" *from csh*.
+# You cannot run it directly.
+# Created by Davide Di Blasi .
+
+set newline='\
+'
+
+alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH:q" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT:q" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc'
+
+# Unset irrelevant variables.
+deactivate nondestructive
+
+setenv VIRTUAL_ENV '/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot'
+
+set _OLD_VIRTUAL_PATH="$PATH:q"
+setenv PATH "$VIRTUAL_ENV:q/bin:$PATH:q"
+
+
+
+if ('' != "") then
+ set env_name = ''
+else
+ set env_name = '('"$VIRTUAL_ENV:t:q"') '
+endif
+
+if ( $?VIRTUAL_ENV_DISABLE_PROMPT ) then
+ if ( $VIRTUAL_ENV_DISABLE_PROMPT == "" ) then
+ set do_prompt = "1"
+ else
+ set do_prompt = "0"
+ endif
+else
+ set do_prompt = "1"
+endif
+
+if ( $do_prompt == "1" ) then
+ # Could be in a non-interactive environment,
+ # in which case, $prompt is undefined and we wouldn't
+ # care about the prompt anyway.
+ if ( $?prompt ) then
+ set _OLD_VIRTUAL_PROMPT="$prompt:q"
+ if ( "$prompt:q" =~ *"$newline:q"* ) then
+ :
+ else
+ set prompt = "$env_name:q$prompt:q"
+ endif
+ endif
+endif
+
+unset env_name
+unset do_prompt
+
+alias pydoc python -m pydoc
+
+rehash
diff --git a/robot/bin/activate.fish b/robot/bin/activate.fish
new file mode 100644
index 0000000000000000000000000000000000000000..aeafac6f93adbf05c5d26ebeff7dc97dcc5419da
--- /dev/null
+++ b/robot/bin/activate.fish
@@ -0,0 +1,100 @@
+# This file must be used using `source bin/activate.fish` *within a running fish ( http://fishshell.com ) session*.
+# Do not run it directly.
+
+function _bashify_path -d "Converts a fish path to something bash can recognize"
+ set fishy_path $argv
+ set bashy_path $fishy_path[1]
+ for path_part in $fishy_path[2..-1]
+ set bashy_path "$bashy_path:$path_part"
+ end
+ echo $bashy_path
+end
+
+function _fishify_path -d "Converts a bash path to something fish can recognize"
+ echo $argv | tr ':' '\n'
+end
+
+function deactivate -d 'Exit virtualenv mode and return to the normal environment.'
+ # reset old environment variables
+ if test -n "$_OLD_VIRTUAL_PATH"
+ # https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
+ if test (echo $FISH_VERSION | head -c 1) -lt 3
+ set -gx PATH (_fishify_path "$_OLD_VIRTUAL_PATH")
+ else
+ set -gx PATH "$_OLD_VIRTUAL_PATH"
+ end
+ set -e _OLD_VIRTUAL_PATH
+ end
+
+ if test -n "$_OLD_VIRTUAL_PYTHONHOME"
+ set -gx PYTHONHOME "$_OLD_VIRTUAL_PYTHONHOME"
+ set -e _OLD_VIRTUAL_PYTHONHOME
+ end
+
+ if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
+ and functions -q _old_fish_prompt
+ # Set an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`.
+ set -l fish_function_path
+
+ # Erase virtualenv's `fish_prompt` and restore the original.
+ functions -e fish_prompt
+ functions -c _old_fish_prompt fish_prompt
+ functions -e _old_fish_prompt
+ set -e _OLD_FISH_PROMPT_OVERRIDE
+ end
+
+ set -e VIRTUAL_ENV
+
+ if test "$argv[1]" != 'nondestructive'
+ # Self-destruct!
+ functions -e pydoc
+ functions -e deactivate
+ functions -e _bashify_path
+ functions -e _fishify_path
+ end
+end
+
+# Unset irrelevant variables.
+deactivate nondestructive
+
+set -gx VIRTUAL_ENV '/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot'
+
+# https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
+if test (echo $FISH_VERSION | head -c 1) -lt 3
+ set -gx _OLD_VIRTUAL_PATH (_bashify_path $PATH)
+else
+ set -gx _OLD_VIRTUAL_PATH "$PATH"
+end
+set -gx PATH "$VIRTUAL_ENV"'/bin' $PATH
+
+# Unset `$PYTHONHOME` if set.
+if set -q PYTHONHOME
+ set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
+ set -e PYTHONHOME
+end
+
+function pydoc
+ python -m pydoc $argv
+end
+
+if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
+ # Copy the current `fish_prompt` function as `_old_fish_prompt`.
+ functions -c fish_prompt _old_fish_prompt
+
+ function fish_prompt
+ # Run the user's prompt first; it might depend on (pipe)status.
+ set -l prompt (_old_fish_prompt)
+
+ # Prompt override provided?
+ # If not, just prepend the environment name.
+ if test -n ''
+ printf '%s%s' '' (set_color normal)
+ else
+ printf '%s(%s) ' (set_color normal) (basename "$VIRTUAL_ENV")
+ end
+
+ string join -- \n $prompt # handle multi-line prompts
+ end
+
+ set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
+end
diff --git a/robot/bin/activate.ps1 b/robot/bin/activate.ps1
new file mode 100644
index 0000000000000000000000000000000000000000..95504d3956b326b1ae2ece60f5db082db8d8bf99
--- /dev/null
+++ b/robot/bin/activate.ps1
@@ -0,0 +1,60 @@
+$script:THIS_PATH = $myinvocation.mycommand.path
+$script:BASE_DIR = Split-Path (Resolve-Path "$THIS_PATH/..") -Parent
+
+function global:deactivate([switch] $NonDestructive) {
+ if (Test-Path variable:_OLD_VIRTUAL_PATH) {
+ $env:PATH = $variable:_OLD_VIRTUAL_PATH
+ Remove-Variable "_OLD_VIRTUAL_PATH" -Scope global
+ }
+
+ if (Test-Path function:_old_virtual_prompt) {
+ $function:prompt = $function:_old_virtual_prompt
+ Remove-Item function:\_old_virtual_prompt
+ }
+
+ if ($env:VIRTUAL_ENV) {
+ Remove-Item env:VIRTUAL_ENV -ErrorAction SilentlyContinue
+ }
+
+ if (!$NonDestructive) {
+ # Self destruct!
+ Remove-Item function:deactivate
+ Remove-Item function:pydoc
+ }
+}
+
+function global:pydoc {
+ python -m pydoc $args
+}
+
+# unset irrelevant variables
+deactivate -nondestructive
+
+$VIRTUAL_ENV = $BASE_DIR
+$env:VIRTUAL_ENV = $VIRTUAL_ENV
+
+New-Variable -Scope global -Name _OLD_VIRTUAL_PATH -Value $env:PATH
+
+$env:PATH = "$env:VIRTUAL_ENV/bin:" + $env:PATH
+if (!$env:VIRTUAL_ENV_DISABLE_PROMPT) {
+ function global:_old_virtual_prompt {
+ ""
+ }
+ $function:_old_virtual_prompt = $function:prompt
+
+ if ("" -ne "") {
+ function global:prompt {
+ # Add the custom prefix to the existing prompt
+ $previous_prompt_value = & $function:_old_virtual_prompt
+ ("" + $previous_prompt_value)
+ }
+ }
+ else {
+ function global:prompt {
+ # Add a prefix to the current prompt, but don't discard it.
+ $previous_prompt_value = & $function:_old_virtual_prompt
+ $new_prompt_value = "($( Split-Path $env:VIRTUAL_ENV -Leaf )) "
+ ($new_prompt_value + $previous_prompt_value)
+ }
+ }
+}
diff --git a/robot/bin/activate.xsh b/robot/bin/activate.xsh
new file mode 100644
index 0000000000000000000000000000000000000000..5997c9853385b946a183bd1498820f7bee1d483d
--- /dev/null
+++ b/robot/bin/activate.xsh
@@ -0,0 +1,46 @@
+"""Xonsh activate script for virtualenv"""
+from xonsh.tools import get_sep as _get_sep
+
+def _deactivate(args):
+ if "pydoc" in aliases:
+ del aliases["pydoc"]
+
+ if ${...}.get("_OLD_VIRTUAL_PATH", ""):
+ $PATH = $_OLD_VIRTUAL_PATH
+ del $_OLD_VIRTUAL_PATH
+
+ if ${...}.get("_OLD_VIRTUAL_PYTHONHOME", ""):
+ $PYTHONHOME = $_OLD_VIRTUAL_PYTHONHOME
+ del $_OLD_VIRTUAL_PYTHONHOME
+
+ if "VIRTUAL_ENV" in ${...}:
+ del $VIRTUAL_ENV
+
+ if "VIRTUAL_ENV_PROMPT" in ${...}:
+ del $VIRTUAL_ENV_PROMPT
+
+ if "nondestructive" not in args:
+ # Self destruct!
+ del aliases["deactivate"]
+
+
+# unset irrelevant variables
+_deactivate(["nondestructive"])
+aliases["deactivate"] = _deactivate
+
+$VIRTUAL_ENV = r"/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot"
+
+$_OLD_VIRTUAL_PATH = $PATH
+$PATH = $PATH[:]
+$PATH.add($VIRTUAL_ENV + _get_sep() + "bin", front=True, replace=True)
+
+if ${...}.get("PYTHONHOME", ""):
+ # unset PYTHONHOME if set
+ $_OLD_VIRTUAL_PYTHONHOME = $PYTHONHOME
+ del $PYTHONHOME
+
+$VIRTUAL_ENV_PROMPT = ""
+if not $VIRTUAL_ENV_PROMPT:
+ del $VIRTUAL_ENV_PROMPT
+
+aliases["pydoc"] = ["python", "-m", "pydoc"]
diff --git a/robot/bin/activate_this.py b/robot/bin/activate_this.py
new file mode 100644
index 0000000000000000000000000000000000000000..44799869857f0fc68aef1c85a38fdbf236f3b017
--- /dev/null
+++ b/robot/bin/activate_this.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+"""Activate virtualenv for current interpreter:
+
+Use exec(open(this_file).read(), {'__file__': this_file}).
+
+This can be used when you must use an existing Python interpreter, not the virtualenv bin/python.
+"""
+import os
+import site
+import sys
+
+try:
+ abs_file = os.path.abspath(__file__)
+except NameError:
+ raise AssertionError("You must use exec(open(this_file).read(), {'__file__': this_file}))")
+
+bin_dir = os.path.dirname(abs_file)
+base = bin_dir[: -len("bin") - 1] # strip away the bin part from the __file__, plus the path separator
+
+# prepend bin to PATH (this file is inside the bin directory)
+os.environ["PATH"] = os.pathsep.join([bin_dir] + os.environ.get("PATH", "").split(os.pathsep))
+os.environ["VIRTUAL_ENV"] = base # virtual env is right above bin directory
+
+# add the virtual environments libraries to the host python import mechanism
+prev_length = len(sys.path)
+for lib in "../lib/python3.8/site-packages".split(os.pathsep):
+ path = os.path.realpath(os.path.join(bin_dir, lib))
+ site.addsitedir(path.decode("utf-8") if "" else path)
+sys.path[:] = sys.path[prev_length:] + sys.path[0:prev_length]
+
+sys.real_prefix = sys.prefix
+sys.prefix = base
diff --git a/robot/bin/chardetect b/robot/bin/chardetect
new file mode 100755
index 0000000000000000000000000000000000000000..7ba5283b977f67c08a2b7d5fcd23caacbdb563ad
--- /dev/null
+++ b/robot/bin/chardetect
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from chardet.cli.chardetect import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/chardetect-3.8 b/robot/bin/chardetect-3.8
new file mode 100755
index 0000000000000000000000000000000000000000..7ba5283b977f67c08a2b7d5fcd23caacbdb563ad
--- /dev/null
+++ b/robot/bin/chardetect-3.8
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from chardet.cli.chardetect import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/chardetect3 b/robot/bin/chardetect3
new file mode 100755
index 0000000000000000000000000000000000000000..7ba5283b977f67c08a2b7d5fcd23caacbdb563ad
--- /dev/null
+++ b/robot/bin/chardetect3
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from chardet.cli.chardetect import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/coverage b/robot/bin/coverage
new file mode 100755
index 0000000000000000000000000000000000000000..a06c93bb951a46144d99c1b3cbf7b514b72a6504
--- /dev/null
+++ b/robot/bin/coverage
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from coverage.cmdline import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/coverage-3.8 b/robot/bin/coverage-3.8
new file mode 100755
index 0000000000000000000000000000000000000000..a06c93bb951a46144d99c1b3cbf7b514b72a6504
--- /dev/null
+++ b/robot/bin/coverage-3.8
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from coverage.cmdline import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/coverage3 b/robot/bin/coverage3
new file mode 100755
index 0000000000000000000000000000000000000000..a06c93bb951a46144d99c1b3cbf7b514b72a6504
--- /dev/null
+++ b/robot/bin/coverage3
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from coverage.cmdline import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/deep b/robot/bin/deep
new file mode 100755
index 0000000000000000000000000000000000000000..37e05e1992182e79e79a8fd642d470cfa91ab557
--- /dev/null
+++ b/robot/bin/deep
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from deepdiff.commands import cli
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(cli())
diff --git a/robot/bin/distro b/robot/bin/distro
new file mode 100755
index 0000000000000000000000000000000000000000..6009396d6f96fc2950ec5df246d2843502d89843
--- /dev/null
+++ b/robot/bin/distro
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from distro import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/distro-3.8 b/robot/bin/distro-3.8
new file mode 100755
index 0000000000000000000000000000000000000000..6009396d6f96fc2950ec5df246d2843502d89843
--- /dev/null
+++ b/robot/bin/distro-3.8
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from distro import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/distro3 b/robot/bin/distro3
new file mode 100755
index 0000000000000000000000000000000000000000..6009396d6f96fc2950ec5df246d2843502d89843
--- /dev/null
+++ b/robot/bin/distro3
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from distro import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/easy_install b/robot/bin/easy_install
new file mode 100755
index 0000000000000000000000000000000000000000..0fdfaa472538ebcd8f5490b34e499b951082b332
--- /dev/null
+++ b/robot/bin/easy_install
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from setuptools.command.easy_install import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/easy_install-3.8 b/robot/bin/easy_install-3.8
new file mode 100755
index 0000000000000000000000000000000000000000..0fdfaa472538ebcd8f5490b34e499b951082b332
--- /dev/null
+++ b/robot/bin/easy_install-3.8
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from setuptools.command.easy_install import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/easy_install3 b/robot/bin/easy_install3
new file mode 100755
index 0000000000000000000000000000000000000000..0fdfaa472538ebcd8f5490b34e499b951082b332
--- /dev/null
+++ b/robot/bin/easy_install3
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from setuptools.command.easy_install import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/genson b/robot/bin/genson
new file mode 100755
index 0000000000000000000000000000000000000000..ad875e542e5d8a6d7eed7f9c03b3b8c66c0aee4f
--- /dev/null
+++ b/robot/bin/genson
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from genson.cli import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/jsonpath.py b/robot/bin/jsonpath.py
new file mode 100755
index 0000000000000000000000000000000000000000..3355364f3af69f63dea2dbdbd8360cb510322aac
--- /dev/null
+++ b/robot/bin/jsonpath.py
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from jsonpath_rw.bin.jsonpath import entry_point
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(entry_point())
diff --git a/robot/bin/jsonpath_ng b/robot/bin/jsonpath_ng
new file mode 100755
index 0000000000000000000000000000000000000000..20857f3251c486faac092b53e053b40daa2e76dc
--- /dev/null
+++ b/robot/bin/jsonpath_ng
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from jsonpath_ng.bin.jsonpath import entry_point
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(entry_point())
diff --git a/robot/bin/jsonpointer b/robot/bin/jsonpointer
new file mode 100755
index 0000000000000000000000000000000000000000..2e2891e42f9c92fb2a7daab863ba59a0da289a1e
--- /dev/null
+++ b/robot/bin/jsonpointer
@@ -0,0 +1,69 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+
+from __future__ import print_function
+
+import sys
+import os.path
+import json
+import jsonpointer
+import argparse
+
+
+parser = argparse.ArgumentParser(
+ description='Resolve a JSON pointer on JSON files')
+
+# Accept pointer as argument or as file
+ptr_group = parser.add_mutually_exclusive_group(required=True)
+
+ptr_group.add_argument('-f', '--pointer-file', type=argparse.FileType('r'),
+ nargs='?',
+ help='File containing a JSON pointer expression')
+
+ptr_group.add_argument('POINTER', type=str, nargs='?',
+ help='A JSON pointer expression')
+
+parser.add_argument('FILE', type=argparse.FileType('r'), nargs='+',
+ help='Files for which the pointer should be resolved')
+parser.add_argument('--indent', type=int, default=None,
+ help='Indent output by n spaces')
+parser.add_argument('-v', '--version', action='version',
+ version='%(prog)s ' + jsonpointer.__version__)
+
+
+def main():
+ try:
+ resolve_files()
+ except KeyboardInterrupt:
+ sys.exit(1)
+
+
+def parse_pointer(args):
+ if args.POINTER:
+ ptr = args.POINTER
+ elif args.pointer_file:
+ ptr = args.pointer_file.read().strip()
+ else:
+ parser.print_usage()
+ sys.exit(1)
+
+ return ptr
+
+
+def resolve_files():
+ """ Resolve a JSON pointer on JSON files """
+ args = parser.parse_args()
+
+ ptr = parse_pointer(args)
+
+ for f in args.FILE:
+ doc = json.load(f)
+ try:
+ result = jsonpointer.resolve_pointer(doc, ptr)
+ print(json.dumps(result, indent=args.indent))
+ except jsonpointer.JsonPointerException as e:
+ print('Could not resolve pointer: %s' % str(e), file=sys.stderr)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/robot/bin/jsonschema b/robot/bin/jsonschema
new file mode 100755
index 0000000000000000000000000000000000000000..30fe0b5afe5eef08d320b4195a7796afc9cfc127
--- /dev/null
+++ b/robot/bin/jsonschema
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from jsonschema.cli import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/pbr b/robot/bin/pbr
new file mode 100755
index 0000000000000000000000000000000000000000..b972910700ca2fa40c3cdbdc8a0a61160722d390
--- /dev/null
+++ b/robot/bin/pbr
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from pbr.cmd.main import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/pip b/robot/bin/pip
new file mode 100755
index 0000000000000000000000000000000000000000..17e9631127f4c8ca1afefb69cd1ff2c7f2656a1c
--- /dev/null
+++ b/robot/bin/pip
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from pip._internal.cli.main import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/pip-3.8 b/robot/bin/pip-3.8
new file mode 100755
index 0000000000000000000000000000000000000000..17e9631127f4c8ca1afefb69cd1ff2c7f2656a1c
--- /dev/null
+++ b/robot/bin/pip-3.8
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from pip._internal.cli.main import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/pip3 b/robot/bin/pip3
new file mode 100755
index 0000000000000000000000000000000000000000..17e9631127f4c8ca1afefb69cd1ff2c7f2656a1c
--- /dev/null
+++ b/robot/bin/pip3
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from pip._internal.cli.main import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/pip3.8 b/robot/bin/pip3.8
new file mode 100755
index 0000000000000000000000000000000000000000..17e9631127f4c8ca1afefb69cd1ff2c7f2656a1c
--- /dev/null
+++ b/robot/bin/pip3.8
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from pip._internal.cli.main import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/pygmentize b/robot/bin/pygmentize
new file mode 100755
index 0000000000000000000000000000000000000000..948300d64e48e74f436b55a07a6cc1dabf943e35
--- /dev/null
+++ b/robot/bin/pygmentize
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from pygments.cmdline import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/robot/bin/python b/robot/bin/python
new file mode 120000
index 0000000000000000000000000000000000000000..ae65fdaa12936b0d7525b090d198249fa7623e66
--- /dev/null
+++ b/robot/bin/python
@@ -0,0 +1 @@
+/usr/bin/python3
\ No newline at end of file
diff --git a/robot/bin/python3 b/robot/bin/python3
new file mode 120000
index 0000000000000000000000000000000000000000..d8654aa0e2f2f3c1760e0fcbcbb52c1c5941fba7
--- /dev/null
+++ b/robot/bin/python3
@@ -0,0 +1 @@
+python
\ No newline at end of file
diff --git a/robot/bin/python3.8 b/robot/bin/python3.8
new file mode 120000
index 0000000000000000000000000000000000000000..d8654aa0e2f2f3c1760e0fcbcbb52c1c5941fba7
--- /dev/null
+++ b/robot/bin/python3.8
@@ -0,0 +1 @@
+python
\ No newline at end of file
diff --git a/robot/bin/rebot b/robot/bin/rebot
new file mode 100755
index 0000000000000000000000000000000000000000..03833ab107617827c376539d47749ac76713dbfc
--- /dev/null
+++ b/robot/bin/rebot
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from robot.rebot import rebot_cli
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(rebot_cli())
diff --git a/robot/bin/robot b/robot/bin/robot
new file mode 100755
index 0000000000000000000000000000000000000000..a6e452112161841c157bb20ef40b429292ef84ab
--- /dev/null
+++ b/robot/bin/robot
@@ -0,0 +1,8 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from robot.run import run_cli
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(run_cli())
diff --git a/robot/bin/rst2html.py b/robot/bin/rst2html.py
new file mode 100755
index 0000000000000000000000000000000000000000..51e5f3f2f70e03bf8e7261d99de83e414b5460b6
--- /dev/null
+++ b/robot/bin/rst2html.py
@@ -0,0 +1,23 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+
+# $Id: rst2html.py 4564 2006-05-21 20:44:42Z wiemann $
+# Author: David Goodger
+# Copyright: This module has been placed in the public domain.
+
+"""
+A minimal front end to the Docutils Publisher, producing HTML.
+"""
+
+try:
+ import locale
+ locale.setlocale(locale.LC_ALL, '')
+except:
+ pass
+
+from docutils.core import publish_cmdline, default_description
+
+
+description = ('Generates (X)HTML documents from standalone reStructuredText '
+ 'sources. ' + default_description)
+
+publish_cmdline(writer_name='html', description=description)
diff --git a/robot/bin/rst2html4.py b/robot/bin/rst2html4.py
new file mode 100755
index 0000000000000000000000000000000000000000..35447d7dc938c11c8a9803c86b7e84061df8980e
--- /dev/null
+++ b/robot/bin/rst2html4.py
@@ -0,0 +1,26 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+
+# $Id: rst2html4.py 7994 2016-12-10 17:41:45Z milde $
+# Author: David Goodger
+# Copyright: This module has been placed in the public domain.
+
+"""
+A minimal front end to the Docutils Publisher, producing (X)HTML.
+
+The output conforms to XHTML 1.0 transitional
+and almost to HTML 4.01 transitional (except for closing empty tags).
+"""
+
+try:
+ import locale
+ locale.setlocale(locale.LC_ALL, '')
+except:
+ pass
+
+from docutils.core import publish_cmdline, default_description
+
+
+description = ('Generates (X)HTML documents from standalone reStructuredText '
+ 'sources. ' + default_description)
+
+publish_cmdline(writer_name='html4', description=description)
diff --git a/robot/bin/rst2html5.py b/robot/bin/rst2html5.py
new file mode 100755
index 0000000000000000000000000000000000000000..43d5aae6398ba183665cc4656d89f8be4cffa386
--- /dev/null
+++ b/robot/bin/rst2html5.py
@@ -0,0 +1,35 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+# -*- coding: utf8 -*-
+# :Copyright: © 2015 Günter Milde.
+# :License: Released under the terms of the `2-Clause BSD license`_, in short:
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+# This file is offered as-is, without any warranty.
+#
+# .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause
+#
+# Revision: $Revision: 8410 $
+# Date: $Date: 2019-11-04 22:14:43 +0100 (Mo, 04. Nov 2019) $
+
+"""
+A minimal front end to the Docutils Publisher, producing HTML 5 documents.
+
+The output also conforms to XHTML 1.0 transitional
+(except for the doctype declaration).
+"""
+
+try:
+ import locale # module missing in Jython
+ locale.setlocale(locale.LC_ALL, '')
+except locale.Error:
+ pass
+
+from docutils.core import publish_cmdline, default_description
+
+description = (u'Generates HTML 5 documents from standalone '
+ u'reStructuredText sources '
+ + default_description)
+
+publish_cmdline(writer_name='html5', description=description)
diff --git a/robot/bin/rst2latex.py b/robot/bin/rst2latex.py
new file mode 100755
index 0000000000000000000000000000000000000000..f6e98135236151fafaa6b57a703199e44993b957
--- /dev/null
+++ b/robot/bin/rst2latex.py
@@ -0,0 +1,26 @@
+#!/home/houcem/Desktop/egm/ngsi-ld-test-suite/robot/bin/python
+
+# $Id: rst2latex.py 5905 2009-04-16 12:04:49Z milde $
+# Author: David Goodger
+# Copyright: This module has been placed in the public domain.
+
+"""
+A minimal front end to the Docutils Publisher, producing LaTeX.
+"""
+
+try:
+ import locale
+ locale.setlocale(locale.LC_ALL, '')
+except:
+ pass
+
+from docutils.core import publish_cmdline
+
+description = ('Generates LaTeX documents from standalone reStructuredText '
+ 'sources. '
+ 'Reads from