<!--
  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>Serialize Function</title>
        <description/>
    </GroupInfo>
    <test-case name="serialize-q01" FilePath="Serialization" Creator="Christina Pavlopoulou">
        <description>Serialize an array.</description>
        <query name="q01_serialize" date="2016-07-26"/>
        <output-file compare="Text">q01_serialize.txt</output-file>
    </test-case>
    <test-case name="serialize-q02" FilePath="Serialization" Creator="Christina Pavlopoulou">
        <description>Serialize an object.</description>
        <query name="q02_serialize" date="2016-07-26"/>
        <output-file compare="Text">q02_serialize.txt</output-file>
    </test-case>
    <test-case name="serialize-q03" FilePath="Serialization" Creator="Christina Pavlopoulou">
        <description>Serialize a date.</description>
        <query name="q03_serialize" date="2016-07-26"/>
        <output-file compare="Text">q03_serialize.txt</output-file>
    </test-case>
    <test-case name="serialize-q04" FilePath="Serialization" Creator="Christina Pavlopoulou">
        <description>Serialize an xml node.</description>
        <query name="q04_serialize" date="2016-07-26"/>
        <output-file compare="Text">q04_serialize.txt</output-file>
    </test-case>
</test-group>
