<!--
/*
 * $Id$
 *
 * 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.
 */
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Composite Definition with Inner Configured Definition with no Type Test</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">Composite Definition with Inner Configured Definition with no Type Test</td></tr>
</thead><tbody>
<tr>
	<td>open</td>
	<td>/tiles-test/index.jsp</td>
	<td></td>
</tr>
<tr>
	<td>clickAndWait</td>
	<td>link=Test Insert Definition that contains another definition inside (configured via tiles-defs.xml) using JSP tags without types</td>
	<td></td>
</tr>
<tr>
	<td>assertTextPresent</td>
	<td>This is a composite definition with tags.</td>
	<td></td>
</tr>
<tr>
	<td>assertTextPresent</td>
	<td>This is the header</td>
	<td></td>
</tr>
<tr>
	<td>assertTextPresent</td>
	<td>This is a configured inner definition.</td>
	<td></td>
</tr>
<tr>
	<td>assertTextPresent</td>
	<td>This is the header</td>
	<td></td>
</tr>
<tr>
	<td>assertTextPresent</td>
	<td>This is a body</td>
	<td></td>
</tr>

</tbody></table>
</body>
</html>
