<?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.
	-->

	<!--
		$Rev$ $Date$
	-->

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.apache.geronimo.testsuite</groupId>
		<artifactId>web-testsuite</artifactId>
		<version>2.2.1</version>
	</parent>

	<artifactId>test-2.5-servlets</artifactId>
	<name>Geronimo TestSuite :: Web Testsuite :: Test Servlets</name>
	<packaging>war</packaging>

	<dependencies>
		<dependency>
			<groupId>org.apache.geronimo.specs</groupId>
			<artifactId>geronimo-servlet_2.5_spec</artifactId>
			<scope>provided</scope>
		</dependency>
	</dependencies>
	<profiles>
		<profile>
			<id>child</id>
			<build>
				<plugins>
                    <plugin>
						<groupId>org.codehaus.mojo</groupId>
						<artifactId>selenium-maven-plugin</artifactId>
					</plugin>
                    <plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-failsafe-plugin</artifactId>
                        <!--The case which uses selenium must have this configuration to run, otherwise, selenium server won't launch -->
                        <configuration>
                            <suiteXmlFiles>
							    <suiteXmlFile>${project.build.testOutputDirectory}/testng.xml</suiteXmlFile>
							</suiteXmlFiles>
                        </configuration> 
					</plugin>
					<plugin>
						<groupId>org.apache.geronimo.buildsupport</groupId>
						<artifactId>geronimo-maven-plugin</artifactId>
						<executions>
							<execution>
								<id>deploy-wars</id>
								<phase>pre-integration-test</phase>
								<goals>
									<goal>deploy-module</goal>
								</goals>
								<configuration>
									<moduleArchive>${project.build.directory}/${artifactId}-${version}.war</moduleArchive>
								</configuration>
							</execution>

							<execution>
								<id>undeploy-war-as-moduleId</id>
								<phase>post-integration-test</phase>
								<goals>
									<goal>undeploy-module</goal>
								</goals>
								<configuration>
									<moduleId>${groupId}/${artifactId}/${version}/car</moduleId>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
	</profiles>
</project>
