1<?xml version="1.0" encoding="UTF-8"?>
2<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
3  <xs:annotation>
4    <xs:documentation source="https://phpunit.de/manual/5.7/en/appendixes.configuration.html">
5      This Schema file defines the rules by which the XML configuration file of PHPUnit 5.7 may be structured.
6    </xs:documentation>
7    <xs:appinfo source="https://phpunit.de/manual/5.7/en/appendixes.configuration.html"/>
8  </xs:annotation>
9  <xs:element name="phpunit" type="phpUnitType">
10    <xs:annotation>
11      <xs:documentation>Root Element</xs:documentation>
12    </xs:annotation>
13  </xs:element>
14  <xs:complexType name="filtersType">
15    <xs:sequence>
16      <xs:element name="whitelist" type="whiteListType" minOccurs="0"/>
17    </xs:sequence>
18  </xs:complexType>
19  <xs:complexType name="filterType">
20    <xs:sequence>
21      <xs:group ref="pathGroup"/>
22      <xs:element name="exclude" maxOccurs="unbounded" minOccurs="0">
23        <xs:complexType>
24          <xs:group ref="pathGroup"/>
25        </xs:complexType>
26      </xs:element>
27    </xs:sequence>
28  </xs:complexType>
29  <xs:complexType name="whiteListType">
30    <xs:complexContent>
31      <xs:extension base="filterType">
32        <xs:attribute name="addUncoveredFilesFromWhitelist" default="true" type="xs:boolean"/>
33        <xs:attribute name="processUncoveredFilesFromWhitelist" default="false" type="xs:boolean"/>
34      </xs:extension>
35    </xs:complexContent>
36  </xs:complexType>
37  <xs:complexType name="groupsType">
38    <xs:choice>
39      <xs:sequence>
40        <xs:element name="include" type="groupType"/>
41        <xs:element name="exclude" type="groupType" minOccurs="0"/>
42      </xs:sequence>
43      <xs:sequence>
44        <xs:element name="exclude" type="groupType"/>
45      </xs:sequence>
46    </xs:choice>
47  </xs:complexType>
48  <xs:complexType name="groupType">
49    <xs:sequence>
50      <xs:element name="group" type="xs:string" maxOccurs="unbounded"/>
51    </xs:sequence>
52  </xs:complexType>
53  <xs:complexType name="listenersType">
54    <xs:sequence>
55      <xs:element name="listener" type="objectType" maxOccurs="unbounded"/>
56    </xs:sequence>
57  </xs:complexType>
58  <xs:complexType name="objectType">
59    <xs:sequence>
60      <xs:element name="arguments" minOccurs="0">
61        <xs:complexType>
62          <xs:group ref="argumentsGroup"/>
63        </xs:complexType>
64      </xs:element>
65    </xs:sequence>
66    <xs:attribute name="class" type="xs:string" use="required"/>
67    <xs:attribute name="file" type="xs:anyURI"/>
68  </xs:complexType>
69  <xs:complexType name="arrayType">
70    <xs:sequence>
71      <xs:element name="element" type="argumentType" minOccurs="0" maxOccurs="unbounded"/>
72    </xs:sequence>
73  </xs:complexType>
74  <xs:complexType name="argumentType">
75    <xs:group ref="argumentChoice"/>
76    <xs:attribute name="key" use="required"/>
77  </xs:complexType>
78  <xs:group name="argumentsGroup">
79    <xs:sequence>
80      <xs:element name="array" type="arrayType" minOccurs="0" maxOccurs="unbounded"/>
81      <xs:element name="integer" type="xs:integer" minOccurs="0" maxOccurs="unbounded"/>
82      <xs:element name="string" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
83      <xs:element name="double" type="xs:double" minOccurs="0" maxOccurs="unbounded"/>
84      <xs:element name="null" minOccurs="0" maxOccurs="unbounded"/>
85      <xs:element name="object" type="objectType" minOccurs="0" maxOccurs="unbounded"/>
86      <xs:element name="file" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
87      <xs:element name="directory" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
88    </xs:sequence>
89  </xs:group>
90  <xs:group name="argumentChoice">
91    <xs:choice>
92      <xs:element name="array" type="arrayType" minOccurs="0" maxOccurs="unbounded"/>
93      <xs:element name="integer" type="xs:integer" minOccurs="0" maxOccurs="unbounded"/>
94      <xs:element name="string" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
95      <xs:element name="double" type="xs:double" minOccurs="0" maxOccurs="unbounded"/>
96      <xs:element name="null" minOccurs="0" maxOccurs="unbounded"/>
97      <xs:element name="object" type="objectType" minOccurs="0" maxOccurs="unbounded"/>
98      <xs:element name="file" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
99      <xs:element name="directory" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
100    </xs:choice>
101  </xs:group>
102  <xs:complexType name="loggersType">
103    <xs:sequence>
104      <xs:element name="log" type="loggerType" maxOccurs="unbounded"/>
105    </xs:sequence>
106  </xs:complexType>
107  <xs:complexType name="loggerType">
108    <xs:attribute name="type">
109      <xs:simpleType>
110        <xs:restriction base="xs:string">
111          <xs:enumeration value="coverage-html"/>
112          <xs:enumeration value="coverage-text"/>
113          <xs:enumeration value="coverage-clover"/>
114          <xs:enumeration value="coverage-crap4j"/>
115          <xs:enumeration value="coverage-xml"/>
116          <xs:enumeration value="json"/>
117          <xs:enumeration value="plain"/>
118          <xs:enumeration value="tap"/>
119          <xs:enumeration value="teamcity"/>
120          <xs:enumeration value="junit"/>
121          <xs:enumeration value="testdox-html"/>
122          <xs:enumeration value="testdox-text"/>
123          <xs:enumeration value="testdox-xml"/>
124        </xs:restriction>
125      </xs:simpleType>
126    </xs:attribute>
127    <xs:attribute name="target" type="xs:anyURI"/>
128    <xs:attribute name="lowUpperBound" type="xs:nonNegativeInteger" default="35"/>
129    <xs:attribute name="highLowerBound" type="xs:nonNegativeInteger" default="70"/>
130    <xs:attribute name="logIncompleteSkipped" type="xs:boolean" default="false"/>
131    <xs:attribute name="showUncoveredFiles" type="xs:boolean" default="false"/>
132    <xs:attribute name="threshold" type="xs:nonNegativeInteger" default="30"/>
133  </xs:complexType>
134  <xs:group name="pathGroup">
135    <xs:sequence>
136      <xs:element name="directory" type="directoryFilterType" minOccurs="0" maxOccurs="unbounded"/>
137      <xs:element name="file" type="fileFilterType" minOccurs="0" maxOccurs="unbounded"/>
138    </xs:sequence>
139  </xs:group>
140  <xs:complexType name="directoryFilterType">
141    <xs:simpleContent>
142      <xs:extension base="xs:anyURI">
143        <xs:attribute type="xs:string" name="suffix" default="Test.php"/>
144        <xs:attributeGroup ref="phpVersionGroup"/>
145      </xs:extension>
146    </xs:simpleContent>
147  </xs:complexType>
148  <xs:complexType name="fileFilterType">
149    <xs:simpleContent>
150      <xs:extension base="xs:anyURI">
151        <xs:attributeGroup ref="phpVersionGroup"/>
152      </xs:extension>
153    </xs:simpleContent>
154  </xs:complexType>
155  <xs:attributeGroup name="phpVersionGroup">
156    <xs:attribute name="phpVersion" type="xs:string" default="5.3.0"/>
157    <xs:attribute name="phpVersionOperator" type="xs:string" default="&gt;="/>
158  </xs:attributeGroup>
159  <xs:complexType name="phpType">
160    <xs:sequence>
161      <xs:choice maxOccurs="unbounded">
162        <xs:element name="includePath" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
163        <xs:element name="ini" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
164        <xs:element name="const" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
165        <xs:element name="var" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
166        <xs:element name="env" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
167        <xs:element name="post" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
168        <xs:element name="get" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
169        <xs:element name="cookie" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
170        <xs:element name="server" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
171        <xs:element name="files" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
172        <xs:element name="request" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
173      </xs:choice>
174    </xs:sequence>
175  </xs:complexType>
176  <xs:complexType name="namedValueType">
177    <xs:attribute name="name" use="required" type="xs:string"/>
178    <xs:attribute name="value" use="required" type="xs:anySimpleType"/>
179  </xs:complexType>
180  <xs:complexType name="phpUnitType">
181    <xs:annotation>
182      <xs:documentation>The main type specifying the document structure</xs:documentation>
183    </xs:annotation>
184    <xs:group ref="configGroup"/>
185    <xs:attributeGroup ref="configAttributeGroup"/>
186  </xs:complexType>
187  <xs:attributeGroup name="configAttributeGroup">
188    <xs:attribute name="backupGlobals" type="xs:boolean" default="true"/>
189    <xs:attribute name="backupStaticAttributes" type="xs:boolean" default="false"/>
190    <xs:attribute name="bootstrap" type="xs:anyURI"/>
191    <xs:attribute name="cacheTokens" type="xs:boolean"/>
192    <xs:attribute name="colors" type="xs:boolean" default="false"/>
193    <xs:attribute name="columns" type="xs:integer" default="80"/>
194    <xs:attribute name="convertErrorsToExceptions" type="xs:boolean" default="true"/>
195    <xs:attribute name="convertNoticesToExceptions" type="xs:boolean" default="true"/>
196    <xs:attribute name="convertWarningsToExceptions" type="xs:boolean" default="true"/>
197    <xs:attribute name="forceCoversAnnotation" type="xs:boolean" default="false"/>
198    <xs:attribute name="printerClass" type="xs:string" default="PHPUnit_TextUI_ResultPrinter"/>
199    <xs:attribute name="printerFile" type="xs:anyURI"/>
200    <xs:attribute name="processIsolation" type="xs:boolean" default="false"/>
201    <xs:attribute name="stopOnError" type="xs:boolean" default="false"/>
202    <xs:attribute name="stopOnFailure" type="xs:boolean" default="false"/>
203    <xs:attribute name="stopOnWarning" type="xs:boolean" default="false"/>
204    <xs:attribute name="stopOnIncomplete" type="xs:boolean" default="false"/>
205    <xs:attribute name="stopOnRisky" type="xs:boolean" default="false"/>
206    <xs:attribute name="stopOnSkipped" type="xs:boolean" default="false"/>
207    <xs:attribute name="failOnRisky" type="xs:boolean" default="false"/>
208    <xs:attribute name="failOnWarning" type="xs:boolean" default="false"/>
209    <xs:attribute name="beStrictAboutChangesToGlobalState" type="xs:boolean" default="false"/>
210    <xs:attribute name="beStrictAboutOutputDuringTests" type="xs:boolean" default="false"/>
211    <xs:attribute name="beStrictAboutResourceUsageDuringSmallTests" type="xs:boolean" default="false"/>
212    <xs:attribute name="beStrictAboutTestsThatDoNotTestAnything" type="xs:boolean" default="false"/>
213    <xs:attribute name="beStrictAboutTodoAnnotatedTests" type="xs:boolean" default="false"/>
214    <xs:attribute name="beStrictAboutCoversAnnotation" type="xs:boolean" default="false"/>
215    <xs:attribute name="checkForUnintentionallyCoveredCode" type="xs:boolean" default="false"/>
216    <xs:attribute name="enforceTimeLimit" type="xs:boolean" default="false"/>
217    <xs:attribute name="timeoutForSmallTests" type="xs:integer" default="1"/>
218    <xs:attribute name="timeoutForMediumTests" type="xs:integer" default="10"/>
219    <xs:attribute name="timeoutForLargeTests" type="xs:integer" default="60"/>
220    <xs:attribute name="testSuiteLoaderClass" type="xs:string" default="PHPUnit_Runner_StandardTestSuiteLoader"/>
221    <xs:attribute name="testSuiteLoaderFile" type="xs:anyURI"/>
222    <xs:attribute name="verbose" type="xs:boolean" default="false"/>
223    <xs:attribute name="stderr" type="xs:boolean" default="false"/>
224    <xs:attribute name="reverseDefectList" type="xs:boolean" default="false"/>
225    <xs:attribute name="registerMockObjectsFromTestArgumentsRecursively" type="xs:boolean" default="false"/>
226    <xs:attribute name="extensionsDirectory" type="xs:string"/>
227  </xs:attributeGroup>
228  <xs:group name="configGroup">
229    <xs:all>
230      <xs:element ref="testSuiteFacet" minOccurs="0"/>
231      <xs:element name="groups" type="groupsType" minOccurs="0"/>
232      <xs:element name="testdoxGroups" type="groupsType" minOccurs="0"/>
233      <xs:element name="filter" type="filtersType" minOccurs="0"/>
234      <xs:element name="logging" type="loggersType" minOccurs="0"/>
235      <xs:element name="listeners" type="listenersType" minOccurs="0"/>
236      <xs:element name="php" type="phpType" minOccurs="0"/>
237    </xs:all>
238  </xs:group>
239  <xs:element name="testSuiteFacet" abstract="true"/>
240  <xs:element name="testsuite" type="testSuiteType" substitutionGroup="testSuiteFacet"/>
241  <xs:element name="testsuites" type="testSuitesType" substitutionGroup="testSuiteFacet"/>
242  <xs:complexType name="testSuitesType">
243    <xs:sequence>
244      <xs:element name="testsuite" type="testSuiteType" maxOccurs="unbounded"/>
245    </xs:sequence>
246  </xs:complexType>
247  <xs:complexType name="testSuiteType">
248    <xs:sequence>
249      <xs:group ref="pathGroup"/>
250      <xs:element name="exclude" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
251    </xs:sequence>
252    <xs:attribute name="name" type="xs:string" use="required"/>
253  </xs:complexType>
254</xs:schema>
255