<!--
  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 Parser</title>
      <description/>
   </GroupInfo>
   <test-case name="json-parser-q01" FilePath="Json/Parser/" Creator="Christina Pavlopoulou">
      <description>Parsing json array from a file.</description>
      <query name="q01_parser" date="2016-06-28"/>
      <output-file compare="Text">q01_parser.txt</output-file>
   </test-case>
   <test-case name="json-parser-q05" FilePath="Json/Parser/" Creator="Christina Pavlopoulou">
      <description>Parsing nested arrays from a json file.</description>
      <query name="q05_parser" date="2016-06-29"/>
      <output-file compare="Text">q05_parser.txt</output-file>
   </test-case>
   <test-case name="json-parser-q06" FilePath="Json/Parser/" Creator="Christina Pavlopoulou">
      <description>Parsing an object from a json file.</description>
      <query name="q06_parser" date="2016-06-29"/>
      <output-file compare="Text">q06_parser.txt</output-file>
   </test-case>
   <test-case name="json-parser-q07" FilePath="Json/Parser/" Creator="Christina Pavlopoulou">
      <description>Parsing nested objects from a json file.</description>
      <query name="q07_parser" date="2016-06-30"/>
      <output-file compare="Text">q07_parser.txt</output-file>
   </test-case>
    <test-case name="json-parser-q08" FilePath="Json/Parser/" Creator="Christina Pavlopoulou">
      <description>Parsing nested objects and arrays from a json file.</description>
      <query name="q08_parser" date="2016-06-30"/>
      <output-file compare="Text">q08_parser.txt</output-file>
   </test-case>
   <test-case name="json-parser-q09" FilePath="Json/Parser/" Creator="Christina Pavlopoulou">
      <description>Parsing nested objects and arrays from a json file.</description>
      <query name="q09_parser" date="2016-07-05"/>
      <output-file compare="Text">q09_parser.txt</output-file>
   </test-case>
   <test-case name="json-parser-q10" FilePath="Json/Parser/" Creator="Christina Pavlopoulou">
      <description>Parsing arrays and objects from a json string.</description>
      <query name="q10_parser" date="2016-07-07"/>
      <output-file compare="Text">q10_parser.txt</output-file>
   </test-case>
   <test-case name="json-parser-q11" FilePath="Json/Parser/" Creator="Christina Pavlopoulou">
      <description>Parsing arrays and objects from a json string.</description>
      <query name="q11_parser" date="2016-07-09"/>
      <output-file compare="Text">q11_parser.txt</output-file>
   </test-case>
   <test-case name="json-parser-q12" FilePath="Json/Parser/" Creator="Christina Pavlopoulou">
      <description>Parsing arrays and objects from a json string.</description>
      <query name="q12_parser" date="2016-07-10"/>
      <output-file compare="Text">q12_parser.txt</output-file>
   </test-case>
    <test-case name="json-parser-q13" FilePath="Json/Parser/" Creator="Christina Pavlopoulou">
      <description>Parsing arrays and objects from a json string.</description>
      <query name="q13_parser" date="2016-07-12"/>
      <expected-error>JNDY0021</expected-error>
   </test-case>
   <test-case name="json-parser-q14" FilePath="Json/Parser/Partition-1" Creator="Christina Pavlopoulou">
      <description>Parsing a collection of json files.</description>
      <query name="q14_parser" date="2016-07-12"/>
     <output-file compare="Text">q14_parser.txt</output-file>
   </test-case>
   <test-case name="json-parser-q14-2" FilePath="Json/Parser/Partition-2" Creator="Christina Pavlopoulou">
      <description>Parsing a collection of json files.</description>
      <query name="q14_parser" date="2016-07-12"/>
     <output-file compare="Text">q14_parser.txt</output-file>
   </test-case>
   <test-case name="json-parser-q14-4" FilePath="Json/Parser/Partition-4" Creator="Christina Pavlopoulou">
      <description>Parsing a collection of json files.</description>
      <query name="q14_parser" date="2016-07-12"/>
     <output-file compare="Text">q14_parser.txt</output-file>
   </test-case>
   <test-case name="json-parser-q15" FilePath="Json/Parser/Partition-1" Creator="Christina Pavlopoulou">
      <description>Parsing a collection of json files.</description>
      <query name="q15_parser" date="2016-07-15"/>
     <output-file compare="Text">q15_parser.txt</output-file>
   </test-case>
   <test-case name="json-parser-q15-2" FilePath="Json/Parser/Partition-2" Creator="Christina Pavlopoulou">
      <description>Parsing a collection of json files.</description>
      <query name="q15_parser" date="2016-07-15"/>
     <output-file compare="Text">q15_parser.txt</output-file>
   </test-case>
   <test-case name="json-parser-q15-4" FilePath="Json/Parser/Partition-4" Creator="Christina Pavlopoulou">
      <description>Parsing a collection of json files.</description>
      <query name="q15_parser" date="2016-07-15"/>
     <output-file compare="Text">q15_parser.txt</output-file>
   </test-case>
   <test-case name="json-parser-q16" FilePath="Json/Parser/Partition-1" Creator="Christina Pavlopoulou">
      <description>Parsing a collection of json files.</description>
      <query name="q16_parser" date="2016-07-15"/>
     <output-file compare="Text">q16_parser.txt</output-file>
   </test-case>
   <test-case name="json-parser-q16-2" FilePath="Json/Parser/Partition-2" Creator="Christina Pavlopoulou">
      <description>Parsing a collection of json files.</description>
      <query name="q16_parser" date="2016-07-15"/>
     <output-file compare="Text">q16_parser.txt</output-file>
   </test-case>
   <test-case name="json-parser-q16-4" FilePath="Json/Parser/Partition-4" Creator="Christina Pavlopoulou">
      <description>Parsing a collection of json files.</description>
      <query name="q16_parser" date="2016-07-15"/>
     <output-file compare="Text">q16_parser.txt</output-file>
   </test-case>
</test-group>
