@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix :      <https://github.com/oxigraph/oxigraph/tests/sparql/manifest#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix mf:    <http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#> .
@prefix qt:    <http://www.w3.org/2001/sw/DataAccess/tests/test-query#> .
@prefix ut:    <http://www.w3.org/2009/sparql/tests/test-update#> .

<>  rdf:type mf:Manifest ;
    rdfs:label "Oxigraph SPARQL tests" ;
    mf:include ( <lateral/manifest.ttl> ) ;
    mf:entries
    (
    :small_unicode_escape_with_multibytes_char
    :long_unicode_escape_with_multibytes_char
    :small_unicode_escape_with_multibytes_char_update
    :long_unicode_escape_with_multibytes_char_update
    :describe
    :describe_where
    :group_concat_with_null
    :single_not_exists
    :property_list_path
    :values_in_filter_exists
    :values_in_filter_not_exists
    :subquery_in_filter_not_exists
    :cmp_langString
    :halloween_problem
    :nested_path
    :nested_expression
    :order_terms
    :nested_anonymous
    :unbound_variable_in_subquery
    :values_too_many
    :values_too_few
    :values_property_path_all
    ) .

:small_unicode_escape_with_multibytes_char rdf:type mf:NegativeSyntaxTest ;
    mf:name "Multibytes character at the end of a unicode escape sequence" ;
    mf:action <small_unicode_escape_with_multibytes_char.rq> .

:long_unicode_escape_with_multibytes_char rdf:type mf:NegativeSyntaxTest ;
    mf:name "Multibytes character at the end of a unicode escape sequence" ;
    mf:action <long_unicode_escape_with_multibytes_char.rq> .

:small_unicode_escape_with_multibytes_char_update rdf:type mf:NegativeUpdateSyntaxTest11 ;
    mf:name "Multibytes character at the end of a unicode escape sequence" ;
    mf:action <small_unicode_escape_with_multibytes_char.ru> .

:long_unicode_escape_with_multibytes_char_update rdf:type mf:NegativeUpdateSyntaxTest11 ;
    mf:name "Multibytes character at the end of a unicode escape sequence" ;
    mf:action <long_unicode_escape_with_multibytes_char.ru> .

:describe rdf:type mf:QueryEvaluationTest ;
    mf:name "Simple DESCRIBE request" ;
    mf:action
         [ qt:query  <describe.rq> ;
           qt:data   <describe_input.ttl> ] ;
    mf:result  <describe_output.ttl> .

:describe_where rdf:type mf:QueryEvaluationTest ;
    mf:name "Simple DESCRIBE request" ;
    mf:action
         [ qt:query  <describe_where.rq> ;
           qt:data   <describe_input.ttl> ] ;
    mf:result  <describe_output.ttl> .

:group_concat_with_null rdf:type mf:QueryEvaluationTest ;
    mf:name "GROUP_CONCAT with NULL" ;
    rdfs:comment    "GROUP_CONCAT should ignore null values" ;
    mf:action
         [ qt:query  <group_concat_with_null.rq> ;
           qt:data   <group_concat_with_null.ttl> ] ;
    mf:result  <group_concat_with_null.srx> .

:single_not_exists rdf:type mf:QueryEvaluationTest ;
    mf:name "query with only a FILTER NOT EXISTS" ;
    mf:action
         [ qt:query  <single_not_exists.rq> ;
           qt:data   <describe_input.ttl> ] ;
    mf:result  <single_not_exists.srx> .

:property_list_path rdf:type mf:PositiveSyntaxTest ;
    mf:name "PropertyListPathNotEmpty children should be ObjectListPath for consistency" ;
    mf:action <property_list_path.rq> .

:values_in_filter_exists rdf:type mf:QueryEvaluationTest ;
    mf:name "VALUES inside of FILTER EXISTS" ;
    mf:action [ qt:query <values_in_filter_exists.rq> ] ;
    mf:result <values_in_filter_exists.srx> .

:values_in_filter_not_exists rdf:type mf:QueryEvaluationTest ;
    mf:name "VALUES inside of FILTER EXISTS" ;
    mf:action [ qt:query <values_in_filter_not_exists.rq> ] ;
    mf:result <values_in_filter_exists.srx> .

:subquery_in_filter_not_exists rdf:type mf:QueryEvaluationTest ;
    mf:name "VALUES inside of FILTER EXISTS" ;
    mf:action [ qt:query <subquery_in_filter_not_exists.rq> ] ;
    mf:result <values_in_filter_exists.srx> .

:cmp_langString rdf:type mf:QueryEvaluationTest ;
    mf:name "rdf:langString with the same language are comparable" ;
    mf:action [ qt:query <cmp_langString.rq> ] ;
    mf:result <cmp_langString.srx> .

:halloween_problem rdf:type mf:UpdateEvaluationTest ;
    mf:name "Halloween Problem: An update operation should not be able to read its own writes" ;
    mf:action [ ut:request <halloween_problem.ru> ] ;
    mf:result [ ut:data <halloween_problem_result.ttl> ] .

:nested_path rdf:type mf:PositiveSyntaxTest11 ;
    mf:name "A very nested property path" ;
    mf:action <nested_path.rq> .

:nested_expression rdf:type mf:PositiveSyntaxTest11 ;
    mf:name "A very nested expression" ;
    mf:action <nested_expression.rq> .

:order_terms rdf:type mf:QueryEvaluationTest ;
    mf:name "literals have an order for ORDER BY" ;
    mf:action [ qt:query <order_terms.rq> ] ;
    mf:result <order_terms.ttl> .

:nested_anonymous rdf:type mf:QueryEvaluationTest ;
    mf:name "Nested anonymous" ;
    mf:action
         [ qt:query  <nested_anonymous.rq> ;
           qt:data   <nested_anonymous.ttl> ] ;
    mf:result  <nested_anonymous.srx> .

:unbound_variable_in_subquery rdf:type mf:QueryEvaluationTest ;
    mf:name "Variable should stay not bound in subqueries even if they are bound in the parent query" ;
    mf:action
         [ qt:query  <unbound_variable_in_subquery.rq> ] ;
    mf:result  <unbound_variable_in_subquery.srx> .

:values_too_many rdf:type mf:NegativeSyntaxTest11 ;
    mf:name "Too many values in a VALUE clause compared to the number of variable" ;
    mf:action <values_too_many.rq> .

:values_too_few rdf:type mf:NegativeSyntaxTest11 ;
    mf:name "Too few values in a VALUE clause compared to the number of variable" ;
    mf:action <values_too_few.rq> .

:values_property_path_all rdf:type mf:QueryEvaluationTest ;
    mf:name "ZeroOrX property paths should only return terms in the graph and not also terms defined in the query" ;
    mf:action
         [ qt:query  <values_property_path_all.rq> ] ;
    mf:result  <values_property_path_all.srx> .