<?xml version="1.0" encoding="UTF-8"?>
<!--

    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.

-->


<?xml-stylesheet href="../nbbuild/javadoctools/apichanges.xsl" type="text/xsl"?>
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../nbbuild/javadoctools/apichanges.dtd">

<!-- INFO FOR PEOPLE ADDING CHANGES:
[most of contents snipped - see openide's apichanges for how-to instructions]
<change>
    <api name="compiler"/>
    <summary>Some brief description here, can use <b>XHTML</b></summary>
    <version major="1" minor="99"/>
    <date day="13" month="6" year="2001"/>
    <author login="jrhacker"/>
    <compatibility addition="yes"/>
    <description>
        The main description of the change here.
        Again can use full <b>XHTML</b> as needed.
    </description>
    <class package="org.openide.compiler" name="DoWhatIWantCompiler"/>
    <issue number="14309"/>
</change>
-->

<apichanges>

<!-- First, a list of API names you may use: -->
<apidefs>
        <apidef name="CommonTestrunnerUIAPI">Common Test Runner UI API/SPI</apidef>
</apidefs>

<!-- ACTUAL CHANGES BEGIN HERE: -->

<changes>
    <change id="TestCreatorConfiguration_validity">
        <api name="CommonTestrunnerUIAPI"/>
        <summary>Added methods to determine the validity of the configuration panel in the "Create Tests" dialog</summary>
        <version major="1" minor="9"/>
        <date day="20" month="8" year="2015"/>
        <author login="theofanis"/>
        <compatibility addition="yes"/>
        <description>
            Added two new methods, isValid() and getErrorMessage(), in order to be able to determine 
            the validity of the configuration panel in the "Create Tests" dialog.
        </description>
        <class package="org.netbeans.modules.gsf.testrunner.ui.spi" name="TestCreatorConfiguration"/>
        <issue number="253523"/>
    </change>
    <change id="TestCreatorConfiguration">
        <api name="CommonTestrunnerUIAPI"/>
        <summary>SPI to make hooking to the configuration dialog when creating tests easier</summary>
        <version major="1" minor="5"/>
        <date day="23" month="7" year="2015"/>
        <author login="theofanis"/>
        <compatibility addition="yes"/>
        <description>
            Modified existing SPI in order to be easier for providers to hook to the configuration dialog when creating tests, so that it
	    can be filled with correct data for example by JUnit, TestNG, PHPUnit or Selenium support.
        </description>
        <class package="org.netbeans.modules.gsf.testrunner.ui.spi" name="TestCreatorConfiguration"/>
        <issue number="253523"/>
    </change>
    <change id="TestCreatorConfigurationProvider">
        <api name="CommonTestrunnerUIAPI"/>
        <summary>SPI to hook to the configuration dialog when creating tests</summary>
        <version major="1" minor="1"/>
        <date day="17" month="11" year="2014"/>
        <author login="theofanis"/>
        <compatibility addition="yes"/>
        <description>
            Added SPI to allow providers to hook to the configuration dialog when creating tests, so that it
	    can be filled with correct data for example by JUnit, TestNG, PHPUnit or Selenium support.
        </description>
        <class package="org.netbeans.modules.gsf.testrunner.ui.spi" name="TestCreatorConfigurationProvider"/>
    </change>
</changes>

  <!-- Now the surrounding HTML text and document structure: -->

  <htmlcontents>
<!--

                            NO NO NO NO NO!

         ==============>    DO NOT EDIT ME!  <======================

          AUTOMATICALLY GENERATED FROM APICHANGES.XML, DO NOT EDIT

                SEE xml/api/doc/changes/apichanges.xml

	-->
	<head>
	    <title>Options Dialog API changes by date</title>
	    <link rel="stylesheet" href="prose.css" type="text/css"/>
	</head>
	<body>

	    <p class="overviewlink">
		<a href="overview-summary.html">Overview</a>
	    </p>

	    <h1>Introduction</h1>

	    <p>This document lists changes made to the Common Test Runner UI APIs. Please ask on the
		<code>nbdev@netbeans.org</code>
		mailing list if you have any questions about the details of a
		change, or are wondering how to convert existing code to be compatible.
	    </p>

	    <hr/>
	    <standard-changelists module-code-name="org.netbeans.modules.gsf.testrunner.ui.api/1"/>

	    <hr/>
	    <p>@FOOTER@</p>

	</body>
    </htmlcontents>
</apichanges>
