<!--
  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="JsonObjectQueries" featureOwner="VXQuery">
    <GroupInfo>
        <title>Json Object</title>
        <description/>
    </GroupInfo>
    <test-case name="json-object-q01" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q01_object" date="2016-06-11"/>
        <output-file compare="Text">q01_object.txt</output-file>
    </test-case>
    <test-case name="json-object-q02" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q02_object" date="2016-06-11"/>
        <output-file compare="Text">q02_object.txt</output-file>
    </test-case>
    <test-case name="json-object-q03" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q03_object" date="2016-06-11"/>
        <output-file compare="Text">q03_object.txt</output-file>
    </test-case>
    <test-case name="json-object-q04" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q04_object" date="2016-06-11"/>
        <output-file compare="Text">q04_object.txt</output-file>
    </test-case>
    <test-case name="json-object-q05" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q05_object" date="2016-06-11"/>
        <output-file compare="Text">q05_object.txt</output-file>
    </test-case>
    <test-case name="json-object-q06" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q06_object" date="2016-06-11"/>
        <output-file compare="Text">q06_object.txt</output-file>
    </test-case>
    <test-case name="json-object-q07" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q07_object" date="2016-06-14"/>
        <expected-error>JNDY0003</expected-error>
    </test-case>
    <test-case name="json-object-q08" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q08_object" date="2016-06-30"/>
        <expected-error>JNTY0004</expected-error>
    </test-case>
    <test-case name="json-object-q09" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q09_object" date="2016-06-30"/>
        <output-file compare="Text">q09_object.txt</output-file>
    </test-case>
    <test-case name="json-object-q10" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q10_object" date="2016-06-30"/>
        <output-file compare="Text">q10_object.txt</output-file>
    </test-case>
    <test-case name="json-object-q11" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q11_object" date="2016-06-30"/>
        <expected-error>JNDY0003</expected-error>
    </test-case>
    <test-case name="json-object-q12" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q12_object" date="2016-07-05"/>
        <output-file compare="Text">q12_object.txt</output-file>
    </test-case>
    <test-case name="json-object-q13" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q13_object" date="2016-07-09"/>
        <output-file compare="Text">q13_object.txt</output-file>
    </test-case>
    <test-case name="json-object-q14" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q14_object" date="2016-07-09"/>
        <output-file compare="Text">q14_object.txt</output-file>
    </test-case>
    <test-case name="json-object-q15" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q15_object" date="2016-07-16"/>
        <output-file compare="Text">q15_object.txt</output-file>
    </test-case>
    <test-case name="json-object-q16" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q16_object" date="2016-07-16"/>
        <output-file compare="Text">q16_object.txt</output-file>
    </test-case>
    <test-case name="json-object-q17" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q17_object" date="2016-07-26"/>
        <expected-error>JNDY0003</expected-error>
    </test-case>
    <test-case name="json-object-q18" FilePath="Json/Object/" Creator="Riyafa Abdul Hameed">
        <description>Object.</description>
        <query name="q18_object" date="2016-07-17"/>
        <output-file compare="Text">q18_object.txt</output-file>
    </test-case>
</test-group>