<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<test-group xmlns="http://www.w3.org/2005/02/query-test-XQTSCatalog" name="JsonArrayNavigationQueries" featureOwner="VXQuery">
    <GroupInfo>
        <title>Json Array Navigation</title>
        <description/>
    </GroupInfo>
    <test-case name="json-array-navigation-q01" FilePath="Json/Array/Navigation" Creator="Christina Pavlopoulou">
        <description>Navigate through an array.</description>
        <query name="q01_array_navigation" date="2016-06-16"/>
        <output-file compare="Text">q01_array_navigation.txt</output-file>
    </test-case>
    <test-case name="json-array-navigation-q02" FilePath="Json/Array/Navigation" Creator="Christina Pavlopoulou">
        <description>Navigate through an array.</description>
        <query name="q02_array_navigation" date="2016-06-16"/>
        <output-file compare="Text">q02_array_navigation.txt</output-file>
    </test-case>
    <test-case name="json-array-navigation-q03" FilePath="Json/Array/Navigation" Creator="Christina Pavlopoulou">
        <description>Size of an array.</description>
        <query name="q03_array_navigation" date="2016-06-16"/>
        <output-file compare="Text">q03_array_navigation.txt</output-file>
    </test-case>
    <test-case name="json-array-navigation-q04" FilePath="Json/Array/Navigation" Creator="Christina Pavlopoulou">
        <description>Navigate through an empty array.</description>
        <query name="q04_array_navigation" date="2016-06-18"/>
        <output-file compare="Text">q04_array_navigation.txt</output-file>
    </test-case>
    <test-case name="json-array-navigation-q05" FilePath="Json/Array/Navigation" Creator="Christina Pavlopoulou">
        <description>Ask for an index out of the array size.</description>
        <query name="q05_array_navigation" date="2016-06-18"/>
        <output-file compare="Text">q05_array_navigation.txt</output-file>
    </test-case>
    <test-case name="json-array-navigation-q06" FilePath="Json/Array/Navigation" Creator="Christina Pavlopoulou">
        <description>Ask for the whole array.</description>
        <query name="q06_array_navigation" date="2016-07-12"/>
        <output-file compare="Text">q06_array_navigation.txt</output-file>
    </test-case>
    <test-case name="json-array-navigation-q07" FilePath="Json/Array/Navigation" Creator="Riyafa Abdul Hameed">
        <description>Navigate through an array</description>
        <query name="q07_array_navigation" date="2016-08-05"/>
        <output-file compare="Text">q07_array_navigation.txt</output-file>
    </test-case>
</test-group>
