<!--
The contents of this file are subject to the terms of the Common Development
and Distribution License (the License). You may not use this file except in
compliance with the License.

You can obtain a copy of the License at https://netbeans.org/cddl.html
or https://netbeans.org/cddl.txt.

When distributing Covered Code, include this CDDL Header Notice in each file
and include the License file at https://netbeans.org/cddl.txt.
If applicable, add the following below the CDDL Header, with the fields
enclosed by brackets [] replaced by your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"

The Original Software is NetBeans. The Initial Developer of the Original
Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
Microsystems, Inc. All Rights Reserved.
-->

<!--
-//NetBeans//DTD XTest Master Config 1.0//EN
-->

<!ELEMENT testconfig (setup|config)*>

<!ELEMENT config (module|testtype|property)*>
<!ATTLIST config
    name CDATA #REQUIRED
    setup CDATA #IMPLIED
    defaultAttributes CDATA #IMPLIED
    defaultTestypes CDATA #IMPLIED
  >
  
<!ELEMENT module (property)*>
<!ATTLIST module
    name CDATA #REQUIRED
    testtypes CDATA #IMPLIED
    attributes CDATA #IMPLIED
    setup CDATA #IMPLIED
  >
  
<!ELEMENT testtype (property)*>
<!ATTLIST testtype
    name CDATA #REQUIRED
    modules CDATA #IMPLIED
    attributes CDATA #IMPLIED
    setup CDATA #IMPLIED
  >

<!ELEMENT property EMPTY>
<!ATTLIST property
    name CDATA #IMPLIED
    value CDATA #IMPLIED
    file CDATA #IMPLIED
  >
  
<!ELEMENT setup (start?,stop?)>
<!ATTLIST setup
    name CDATA #IMPLIED
  >

<!ELEMENT start EMPTY>
<!ATTLIST start
    dir CDATA #IMPLIED
    target CDATA #IMPLIED
    antfile CDATA #IMPLIED
    onBackground (true|false|yes|no|0|1) "false"
    delay NMTOKEN "0"
  >

<!ELEMENT stop EMPTY>
<!ATTLIST stop
    dir CDATA #IMPLIED
    target CDATA #IMPLIED
    antfile CDATA #IMPLIED
    onBackground (true|false|yes|no|0|1) "false"
    delay NMTOKEN "0"
  >

