<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="../../../../../..//default_style.css" type="text/css">
<link rel="stylesheet" href="../../../../../..//webtools/wtp.css" type="text/css">
<title>WTP Milestone 8</title>
</head>
<body>
<table width="100%" cellspacing="5" cellpadding="2" border="0">
<tbody>
<tr>
<td width="60%" align="left"><font class="indextop">JSP Test Plan</font>
<br>
<font class="indexsub">WTP Milestone 8</font></td><td width="40%"><img width="120" hspace="50" height="86" align="middle" src="../../../../../..//images/Idea.jpg"></td>
</tr>
</tbody>
</table>
<table width="100%" cellspacing="5" cellpadding="2" border="0">
<col width="16">
<col width="*">
<tbody>
<tr>
<td valign="top" bgcolor="#0080c0" align="left" colspan="2"><b><font face="Arial,Helvetica" color="#ffffff">Status of this Plan</font></b></td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<p>Proposed Plan (2005-09-16)</p>
</td>
</tr>
<tr>
<td valign="top" bgcolor="#0080c0" align="left" colspan="2"><b><font face="Arial,Helvetica" color="#ffffff">Overall goals</font></b></td>
</tr>
<tr>
<td valign="top" align="right"><img width="16" height="16" border="0" src="../../../../../..//images/Adarrow.gif"></td><td><b>New for 1.0M8</b></td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<p>
			Not much has been added in terms of new functionality
			for 1.0M8.  Most of the work done was in the areas of cleaning up dead code,
			and cleaning up APIs,particularly ViewerConfiguration.
			<br>
<br>
			Tests addressing areas where we had problems last milestone
			have been added as links at the end of this plan.
			<br>
<br>
			The M5 test plan should have sufficient coverage for 1.0M8.
		</p>
</td>
</tr>
<tr>
<td valign="top" align="right"><img width="16" height="16" border="0" src="../../../../../..//images/Adarrow.gif"></td><td>
			<b>Co-developer Testing</b>
		</td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<p>
			We will inspect "runtime" version of build to be
			sure extra source is not included, and more important, we'll
			inspect and test importing SDK version to be sure all
			relevant "open source" is included in that SDK
			build and that it correctly imports into a development
			environment.
		</p>
</td>
</tr>
<tr>
<td valign="top" align="right"><img width="16" height="16" border="0" src="../../../../../..//images/Adarrow.gif"></td><td>
			<b>API Testing</b>
		</td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<p>
			Here in 1.0M8 we don't consider we have any official API yet
			(since not spec'd as such) but will reserve this space for
			future plans to details were API Unit tests are, their
			coverage, etc.
		</p>
</td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<p>
			We do have several hundred unit tests which we expect to be
			running and passing for 1.0M8, which test various aspects of
			parsing, model creation, and correct charset handling, among
			other things.
		</p>
</td>
</tr>
<tr>
<td valign="top" align="right"><img width="16" height="16" border="0" src="../../../../../..//images/Adarrow.gif"></td><td>
			<b>End User Testing</b>
		</td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<p>
			The nature of the end-user testing is intentionally planned
			to be "ad hoc" instead of specifying step by step "how to"
			directions and specific "expected results" sections often
			seen in test cases. This is done because its felt leads to
			greater number of "paths" being tested, and allows end-users
			more motivation for logging "bugs" if things didn't work as
			<i>they</i>
			expected, even if it is working as designed.
		</p>
</td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<p>
			As we progress through milestones, we'll add more and more
			detail for special cases, special files, special projects,
			etc.When we do have special or sample test files and
			projects, we will keep those stored in CVS, as projects
			under a
			<i>testdata</i>
			directory under the
			<i>development</i>
			directory of relevant component so that testers (from
			immediate team, or community) can easily check out into the
			environment being tested.
		</p>
</td>
</tr>
<tr>
<td valign="top" align="right"><img width="16" height="16" border="0" src="../../../../../..//images/Adarrow.gif"></td><td>
			<b>Platform Testing</b>
		</td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<p>
			While we do not have any platform specific code, or
			function, we will have some team members do end-user tests
			on Linux, some on Windows. We will also confirm unit tests
			pass on both platforms.
		</p>
</td>
</tr>
<tr>
<td valign="top" align="right"><img width="16" height="16" border="0" src="../../../../../..//images/Adarrow.gif"></td><td>
			<b>Performance Testing</b>
		</td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<p>
			We have added (some) automated performance tests along the
			lines of the Eclipse base performance unit tests in future
			milestones. These are currently in the
			<b>org.eclipse.wst.*.ui.tests.performance</b>
			and
			<b>org.eclipse.jst.jsp.ui.tests.performance</b>
			plugins.
			<br>
			
<br>
			We will continue to add more test cases in upcoming
			milestones.
		</p>
</td>
</tr>
<tr>
<td valign="top" bgcolor="#0080c0" align="left" colspan="2"><b><font face="Arial,Helvetica" color="#ffffff"><b>New for 1.0M8</b></font></b></td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<p>
			
<a href="../../../wst/sse/M8/viewerconfig-test.html">Structured Text Viewer Configuration tests</a>
			
<br>
<a href="../../../wst/sse/M8/action-test.html">Structured Text Editor Action tests</a>
		
</p>
</td>
</tr>
<tr>
<td valign="top" bgcolor="#0080c0" align="left" colspan="2"><b><font face="Arial,Helvetica" color="#ffffff">JSP Tests</font></b></td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<ul>
			
<li>
				check Source Editing features from
				<a href="../../../wst/sse/M8/milestone_test_plan.html#matrix">
					feature matrix
				</a>
			
</li>
			
<li>
				check "embedded languages" (Java, HTML, CSS,
				JavaScript) have same features as indicated in matrix
			</li>
			
<li>
				test taglib directives in the following ways:
				<ul>
					
<li>
						Using the taglib URI value in the Web deployment
						descriptor
					</li>
					
<li>
						Using the context-relative path that refers
						directly to the TLD or JAR file
					</li>
					
<li>
						Using a page-relative path that refers directly
						to the TLD or JAR file
					</li>
					
<li>
						For a J2EE 1.3 Web project only, using the URI
						element value defined in the TLD
					</li>
				
</ul>
			
</li>
			
<li>
				test standard samples
				<ul>
					
<li>in HTML "text/html" content type</li>
					
<li>in XHTML "text/html" content type</li>
					
<li>in XHTML "text/xml" content type</li>
					
<li>all in JSP syntax and XML syntax</li>
				
</ul>
			
</li>
			
<li>test with simple custom tags</li>
			
<li>
				test with commonly used custom tags (such as Struts)
			</li>
			
<li>
				test defining custom tags in TLD (with tag-dependent
				body content; for example, SQL statements)
			</li>
			
<li>
				test debug breakpoints can be set/unset, displayed in
				left-hand-ruler, breakpoint view (see <a href="../../../../../jst/components/jsp/M4/jsp-breakpoint-test.html">JSP Breakpoint tests</a>)
			</li>
			
<li>
				quick test that breakpoints do indeed 'break' (we'll use
				Tomcat)
			</li>
			
<li>
				A quick sanity check that preferences have effect, and
				do no harm. Only quick check, since many changes planned
				in this are for future milestones.
			</li>
		
</ul>
</td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<p>
			
<ul>
				
<li>
					as you type validation:
					<ul>
						
<li>
							job based, make sure squiggles show up when
							they should and are removed when problems
							are fixed
						</li>
						
<li>
							test various partition types in the document (JSP, HTML, EL)
						</li>
						
					
</ul>
				
</li>
				
<li>
					html validation:
					<ul>
						
<li>batch workbench validation, as-you-type</li>
					
</ul>
				
</li>

				
<li>
					hyperlink open on:
					<ul>
						
<li>Java Elements, href, includes, link, style, etc...</li>
					
</ul>
				
</li>

				
<li>
					preferences:
					<ul>
						
<li>how we use the preferences in the "All Text Editors"
					         preference page now.
					    </li>
						
<li>make sure preferenes work</li>
						
<li>after shutdown and restart</li>
					
</ul>
				
</li>

				
<li>
					profiling:
					<ul>
						
<li>using your favorite profiler (<a href="http://eclipsefaq.org/chris/xray/index.html">XRay</a>, YourKit, etc...)
						    test basic editor functions and look for 
							problem areas (large memory consumption, intense CPU usage)
						</li>
					
</ul>
				
</li>
				

			
</ul>
		
</p>
</td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<p>
			EL Support	
			<ul>
				
<li>validation (batch, as-you-type)</li>
				
<li>content assist</li>
			
</ul>
		
</p>
</td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<p>
		JSP Validator (batch validator)
		
			<ul>
				
<li>make sure prolems show up in problems view</li>
				
<li>error icons should "gray" out when fixed</li>
			
</ul>
			
<br>Variables declared by custom tags (eg. Struts custom tags)
			<ul>
				
<li>you should get content assist/validation for these</li>
			
</ul>
			
<br>Background syntax highlighting for JSP regions
			<ul>
				
<li>configure via JSP Styles page</li>
			
</ul>
			
<br>Test files with different doctype declarations and output types (via page directive)
			<ul>
				
<li>test HTML, XHTML, XML</li>
				
<li>test all files created from templates</li>
			
</ul>
		
</p>
</td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<p>
			Tab Preferences
		</p>
</td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<ul>
				
<li>Web and XML-&gt;Content Type Files -&gt; Content Type Source 
				-&gt; Indent using tabs / Indent using spaces
				-&gt; Indentation size</li>
			
				
<li>Verify the correct tab character is used</li>
				
<li>Verify the correct number of tab characters is used</li>
				
<li>Verify Source-&gt;Shift Left/Shift Right and the Shift-Tab/Tab key follow the preferences</li>
				
<li>With nothing selected</li>
				
<li>With multiple lines selected</li>
				
<li>Verify Format follow the preferences</li>
				
<li>Verify when using tab characters, the displayed tab width preference is followed (General-&gt;Editors-&gt;Text Editors -&gt; Displayed tab width)</li>
			
</ul>
</td>
</tr>
<tr>
<td valign="top" bgcolor="#0080c0" align="left" colspan="2"><b><font face="Arial,Helvetica" color="#ffffff"><b>Regression Tests</b></font></b></td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<p>
			
<a href="../../../../../jst/components/jsp/M4/jsp-breakpoint-test.html">JSP Breakpoint tests</a>
			
<br>
<a href="../../../../../wst/components/sse/M4/formatting-test.html">Formatting tests</a>
			
<br>
<a href="taglib-test.html">Taglib tests</a>
			
<br>
		
</p>
</td>
</tr>
<tr>
<td valign="top" bgcolor="#0080c0" align="left" colspan="2"><b><font face="Arial,Helvetica" color="#ffffff">Source Editing Test Plans</font></b></td>
</tr>
<tr>
<td valign="top" align="right">&nbsp;</td><td valign="top">
<p>
			
<a href="../../../wst/sse/M8/milestone_test_plan.html">org.eclipse.wst.sse</a>
			
<br>
<a href="../../../wst/xml/M8/milestone_test_plan.html">org.eclipse.wst.xml</a>
			
<br>
<a href="../../../wst/html/M8/milestone_test_plan.html">org.eclipse.wst.html</a>
			
<br>
<a href="../../../wst/css/M8/milestone_test_plan.html">org.eclipse.wst.css</a>
			
<br>
<a href="../../../wst/dtd/M8/milestone_test_plan.html">org.eclipse.wst.dtd</a>
			
<br>
<a href="../../../wst/javascript/M8/milestone_test_plan.html">org.eclipse.wst.javascript</a>
			
			
<br>
<a href="../../../jst/jsp/M8/milestone_test_plan.html">org.eclipse.jst.jsp</a>	
		
</p>
</td>
</tr>
</tbody>
</table>
</body>
</html>
