<h2>Platform Core - Testing</h2>

As you know, we have hit Freeze 1 and we are now testing for the rest of the week. Besides testing the product as a whole, here are some of the areas that we have worked on lately and should focus on to ensure is stable.
<p>

Of course the list is not extensive so if you have items to add, please pass along to the team.
<p>

We should be focusing on stability and servicability. We don't want to crash and if bad things happen, is the user notified appropriately?
<p>

If you have any questions please ask.
<p>

Happy testing.

<p>

<b>General Notes</b>
<ul>
<li>All testing should go through the executable. DO NOT start Eclipse with the Main class and args.
</ul>

<p>

<b>Platforms/Locales/JRE</b>
<ul>
<li>Win2000, Linux RH 7.2, WinXP (these are the ones that we have in our offices, others are available in the labs)
<li>en_US, ja_JP
<li>(some are available on internal web site, not sure where to get others) IBM JRE 1.3.1, IBM JRE 1.3.0, Sun JDK 1.3.1, Sun JDK 1.4
</ul>

<p>

<b>Startup</b><br>
<ul>
<li>test all command line paramters
<li>use the following characters in install directories: <space> + -, etc etc
<li>remove plugins directory
<li>remove startup.jar
<li>remove boot
<li>remove xerces
<li>remove runtime
<li>remove jre
<li>always check .log to see what information is presented to the user
</ul>

<p>

<b>Registry Caching</b>
<ul>
<li>first time
<li>add new plugin
<li>remove plugin
<li>modify plugin
<li>make empty cache file
<li>make bogus cache file
<li>test against a lot of plugins in install dir
</ul>

<p>

<b>Project natures</b>
<ul>
<li>add new nature
<li>remove nature
<li>nature sets
<li>nature one-of
<li>add nature from disabled/non-existant plugin
<li>see natures doc for scenerios and expected behaviour
</ul>

<p>

<b>Project description</b>
<ul>
<li>1.0 project in 2.0 workspace
<li>closed 1.0 project in 2.0 workspace
<li>delete .project from Navigator
<li>delete .project from Windows Explorer
<li>empty .project file
<li>bogus .project file
<li>readonly .project file
<li>add new entries to .project file
<li>see project description doc for scenerios and expected behaviour
</ul>

<p>

<b>Preference Store</b>
<ul>
<li>malformed ini file
<li>conflicting values
<li>valid files submitted at different levels (command line, plugin, etc)
<li>see pref store docs for scenerios, expected behaviour, and how to set up prefs
</ul>

<p>

<b>Ant Core</b>
<ul>
<li>progress and cancelation (check if UI exposes this)
<li>classpaths (external jars, etc)
<li>new External Tooling functionality
<li>ant scripts as builders
<li>refresh local
<li>convert path (provided by core resources)
</ul>

<p>

<b>PDE-Build</b>
<ul>
<li>features: build update jars with the feature.destination parameter to specify output dir for update.jar file
<li>plugins/fragments: build update jars with the plugin.destination parameter to specify output dir for update.jar file
<li>plugins/fragments: build.result.folder for specifying the output for src.zip, *.jar
<li>above is some new work in the pde-build area, Rodrigo may have more areas which he would like tested
</ul>

<p>

<b>Target Management</b>
<ul>
<li>now contributed by Team team (context menu "Deploy")
<li>the WebDAV target code needs to be enabled by renaming the org.eclipse.team.webdav/plugin.xml.off file to plugin.xml
<li>should be able to test against rain.ott.oti.com and paris.ott.oti.com (URLs to follow)
<li>Please check Platform/VCM Bugzilla component before submitting as there are a lot of open PRs since this is still a work in progress
<li>I believe that most of the PRs against the WebDAV target management code are prefixed with "dav:"
</ul>

<p>

<b>General</b>
<ul>
<li>installation of Eclipse in a R/O directory (easy to test on Linux)
<li>single installation, multiple concurrent workspaces
<li>multiple installations, single workspace (should fail)
<li>install/update
</ul>