<!--
  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="JsonArrayQueries" featureOwner="VXQuery">
   <GroupInfo>
      <title>Json Libraries</title>
      <description/>
   </GroupInfo>
   <test-case name="descendant-arrays" FilePath="Json/Libraries/" Creator="Christina Pavlopoulou">
      <description>Json Libraries.</description>
      <query name="descendant_arrays" date="2016-07-18"/>
      <output-file compare="Text">descendant_arrays.txt</output-file>
   </test-case>
   <test-case name="descendant-arrays2" FilePath="Json/Libraries/" Creator="Christina Pavlopoulou">
      <description>Json Libraries.</description>
      <query name="descendant_arrays2" date="2016-07-19"/>
      <output-file compare="Text">descendant_arrays2.txt</output-file>
   </test-case>
   <test-case name="descendant-arrays3" FilePath="Json/Libraries/" Creator="Christina Pavlopoulou">
      <description>Json Libraries.</description>
      <query name="descendant_arrays3" date="2016-07-28"/>
      <output-file compare="Text">descendant_arrays3.txt</output-file>
   </test-case>
   <test-case name="flatten" FilePath="Json/Libraries/" Creator="Christina Pavlopoulou">
      <description>Json Libraries.</description>
      <query name="flatten" date="2016-07-20"/>
      <output-file compare="Text">flatten.txt</output-file>
   </test-case>
    <test-case name="values" FilePath="Json/Libraries/" Creator="Riyafa Abdul Hameed">
        <description>Json Libraries.</description>
        <query name="values" date="2016-07-31"/>
        <output-file compare="Text">values.txt</output-file>
    </test-case>
    <test-case name="descendant_objects" FilePath="Json/Libraries/" Creator="Riyafa Abdul Hameed">
        <description>Json Libraries.</description>
        <query name="descendant_objects" date="2016-07-28"/>
        <output-file compare="Text">descendant_objects.txt</output-file>
    </test-case>
    <test-case name="descendant_pairs" FilePath="Json/Libraries/" Creator="Riyafa Abdul Hameed">
        <description>Json Libraries.</description>
        <query name="descendant_pairs" date="2016-07-29"/>
        <output-file compare="Text">descendant_pairs.txt</output-file>
    </test-case>
   <test-case name="project" FilePath="Json/Libraries/" Creator="Riyafa Abdul Hameed">
      <description>Json Libraries.</description>
      <query name="project" date="2016-07-31"/>
      <output-file compare="Text">project.txt</output-file>
   </test-case>
   <test-case name="remove-keys" FilePath="Json/Libraries/" Creator="Riyafa Abdul Hameed">
      <description>Json Libraries.</description>
      <query name="remove_keys" date="2016-07-31"/>
      <output-file compare="Text">remove_keys.txt</output-file>
   </test-case>
   <test-case name="accumulate" FilePath="Json/Libraries/" Creator="Riyafa Abdul Hameed">
      <description>Json Libraries.</description>
      <query name="accumulate" date="2016-07-27"/>
      <output-file compare="Text">accumulate.txt</output-file>
   </test-case>
   <test-case name="intersect" FilePath="Json/Libraries/" Creator="Riyafa Abdul Hameed">
      <description>Json Libraries.</description>
      <query name="intersect" date="2016-07-30"/>
      <output-file compare="Text">intersect.txt</output-file>
   </test-case>
</test-group>
