<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:qa="urn:model.allure.qatools.yandex.ru"
           targetNamespace="urn:model.allure.qatools.yandex.ru">

    <xs:element name="test-suite" type="qa:test-suite-result"/>

    <xs:complexType name="test-suite-result">
        <xs:all>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="title" type="xs:string" minOccurs="0"/>
            <xs:element name="description" type="qa:description" minOccurs="0"/>
            <xs:element name="test-cases" type="qa:test-cases-result" minOccurs="0"/>
            <xs:element name="labels" type="qa:labels" minOccurs="0"/>
        </xs:all>
        <xs:attribute name="start" type="xs:long" use="required"/>
        <xs:attribute name="stop" type="xs:long" use="required"/>
        <xs:attribute name="version" type="xs:string"/>
    </xs:complexType>

    <xs:complexType name="test-cases-result">
        <xs:sequence>
            <xs:element name="test-case" type="qa:test-case-result" maxOccurs="unbounded" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="test-case-result">
        <xs:all>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="title" type="xs:string" minOccurs="0"/>
            <xs:element name="description" type="qa:description" minOccurs="0"/>
            <xs:element name="failure" type="qa:failure" minOccurs="0"/>
            <xs:element name="steps" type="qa:steps" minOccurs="0"/>
            <xs:element name="attachments" type="qa:attachments" minOccurs="0"/>
            <xs:element name="labels" type="qa:labels" minOccurs="0"/>
            <xs:element name="parameters" type="qa:parameters" minOccurs="0"/>
        </xs:all>
        <xs:attribute name="start" type="xs:long" use="required"/>
        <xs:attribute name="stop" type="xs:long" use="required"/>
        <xs:attribute name="status" type="qa:status" use="required"/>
    </xs:complexType>

    <xs:complexType name="steps">
        <xs:sequence>
            <xs:element name="step" type="qa:step" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="step">
        <xs:all>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="title" type="xs:string" minOccurs="0"/>
            <xs:element name="attachments" type="qa:attachments" minOccurs="0"/>
            <xs:element name="steps" type="qa:steps" minOccurs="0"/>
        </xs:all>
        <xs:attribute name="start" type="xs:long" use="required"/>
        <xs:attribute name="stop" type="xs:long" use="required"/>
        <xs:attribute name="status" type="qa:status" use="required"/>
    </xs:complexType>

    <xs:complexType name="failure">
        <xs:all>
            <xs:element name="message" type="xs:string"/>
            <xs:element name="stack-trace" type="xs:string" minOccurs="0"/>
        </xs:all>
    </xs:complexType>

    <xs:complexType name="labels">
        <xs:sequence>
            <xs:element name="label" type="qa:label" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="label">
        <xs:attribute name="name" type="xs:string" use="required"/>
        <xs:attribute name="value" type="xs:string" use="required"/>
    </xs:complexType>

    <xs:complexType name="parameters">
        <xs:sequence>
            <xs:element name="parameter" type="qa:parameter" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="parameter">
        <xs:attribute name="name" type="xs:string" use="required"/>
        <xs:attribute name="value" type="xs:string" use="required"/>
        <xs:attribute name="kind" type="qa:parameter-kind" use="required"/>
    </xs:complexType>

    <xs:simpleType name="parameter-kind">
        <xs:restriction base="xs:string">
            <xs:enumeration value="argument"/>
            <xs:enumeration value="system-property"/>
            <xs:enumeration value="environment-variable"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="attachments">
        <xs:sequence>
            <xs:element name="attachment" type="qa:attachment" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="attachment">
        <xs:attribute name="title" type="xs:string" use="required"/>
        <xs:attribute name="source" type="xs:string" use="required"/>
        <xs:attribute name="type" type="xs:string" use="required"/>
        <xs:attribute name="size" type="xs:int"/>
    </xs:complexType>

    <!--Deprecated, will be removed in 1.4.0-->
    <xs:simpleType name="attachment-type">
        <xs:restriction base="xs:string">
            <xs:enumeration value="txt"/>
            <xs:enumeration value="html"/>
            <xs:enumeration value="xml"/>
            <xs:enumeration value="png"/>
            <xs:enumeration value="jpg"/>
            <xs:enumeration value="json"/>
            <xs:enumeration value="other"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="status">
        <xs:restriction base="xs:string">
            <xs:enumeration value="failed"/>
            <xs:enumeration value="broken"/>
            <xs:enumeration value="passed"/>
            <xs:enumeration value="canceled"/>
            <xs:enumeration value="pending"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="label-name">
        <xs:restriction base="xs:string">
            <xs:enumeration value="feature"/>
            <xs:enumeration value="story"/>
            <xs:enumeration value="severity"/>
            <xs:enumeration value="language"/>
            <xs:enumeration value="framework"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="severity-level">
        <xs:restriction base="xs:string">
            <xs:enumeration value="blocker"/>
            <xs:enumeration value="critical"/>
            <xs:enumeration value="normal"/>
            <xs:enumeration value="minor"/>
            <xs:enumeration value="trivial"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="description">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="type" type="qa:description-type" default="text"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:simpleType name="description-type">
        <xs:restriction base="xs:string">
            <xs:enumeration value="markdown"/>
            <xs:enumeration value="text"/>
            <xs:enumeration value="html"/>
        </xs:restriction>
    </xs:simpleType>

</xs:schema>