<!--
 ! 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-suite xmlns="urn:xml.testframework.asterix.apache.org"
            ResultOffsetPath="results"
            QueryOffsetPath="queries"
            QueryFileExtension=".sqlpp">
  <test-group name="error-handling">
    <test-case FilePath="graphix">
      <compilation-unit name="error-handling">
        <output-dir compare="Text">error-handling</output-dir>
        <expected-error>Cannot drop dataset (or view) TestDataverse.GenericDataset being used by graph TestGraph</expected-error>
        <expected-error>Cannot drop function TestDataverse.TestFunction() being used by graph TestGraph</expected-error>
        <expected-error>Cannot drop dataset (or view) TestDataverse.TestView being used by graph TestGraph</expected-error>
        <expected-error>Cannot drop synonym TestDataverse.DatasetSynonym being used by graph TestGraph</expected-error>
        <expected-error>Cannot drop dataverse: dataset (or view) TestDataverse2.GenericDataset being used by graph TestGraph</expected-error>
        <expected-error>Bad definition for a graph element(.)*Cannot find dataset DatasetThatDoesNotExist in dataverse TestDataverse nor an alias with name DatasetThatDoesNotExist</expected-error>
        <expected-error>Bad definition for a graph element(.)*Cannot resolve ambiguous alias reference for identifier V</expected-error>
        <expected-error>Conflicting primary keys for vertices with label Vertex1</expected-error>
        <expected-error>Destination vertex Vertex3 not found in the edge EDGE_1.</expected-error>
        <expected-error>Graph TestGraph already exists.</expected-error>
        <expected-error>Graph GraphThatDoesntExist2 does not exist.</expected-error>
      </compilation-unit>
    </test-case>
  </test-group>
</test-suite>