<!-- Copyright (c) 2011, 2018 PetalsLink and others.
All rights reserved.
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 which accompanies this distribution,
and is available at http://www.eclipse.org/legal/epl-v10.html

Authors:
* Mickael Istria (PetalsLink)
-->
<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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>org.eclipse.swtbot.plugins</groupId>
	<artifactId>org.eclipse.swtbot.forms.finder.test</artifactId>
	<packaging>eclipse-test-plugin</packaging>
	<parent>
		<groupId>org.eclipse.swtbot</groupId>
		<artifactId>parent</artifactId>
		<version>2.8.0-SNAPSHOT</version>
		<relativePath>../pom.xml</relativePath>
	</parent>
	<profiles>
		<profile>
			<id>skip-ui-tests</id>
			<activation>
				<property>
					<name>skip-ui-tests</name>
				</property>
			</activation>
			<properties>
				<maven.test.skip>true</maven.test.skip>
			</properties>
		</profile>
		<profile>
			<id>macosx</id>
			<activation>
				<os>
					<family>mac</family>
				</os>
			</activation>
			<properties>
				<ui.test.vmargs>${uitest.vmparams} -XstartOnFirstThread</ui.test.vmargs>
			</properties>
		</profile>
		<profile>
			<id>other-os</id>
			<activation>
				<os>
					<family>!mac</family>
				</os>
			</activation>
			<properties>
				<ui.test.vmargs>${uitest.vmparams}</ui.test.vmargs>
			</properties>
		</profile>
	</profiles>

	<build>
		<plugins>
			<plugin>
				<groupId>org.eclipse.tycho</groupId>
				<artifactId>tycho-surefire-plugin</artifactId>
				<version>${tycho-version}</version>
				<configuration>
					<argLine>${ui.test.vmargs}</argLine>
					<useUIHarness>true</useUIHarness>
					<useUIThread>false</useUIThread>
					<product>org.eclipse.sdk.ide</product>
					<application>org.eclipse.ui.ide.workbench</application>
					<testSuite>org.eclipse.swtbot.forms.finder.test</testSuite>
					<testClass>org.eclipse.swtbot.forms.finder.test.AllTests</testClass>
					<environmentVariables>
						<!-- Ubuntu overlay scrollbars cause different crashes in GTK2 so disable them -->
						<LIBOVERLAY_SCROLLBAR>0</LIBOVERLAY_SCROLLBAR>
						<SWT_GTK3>${SWT_GTK3}</SWT_GTK3>
					</environmentVariables>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.eclipse.tycho</groupId>
				<artifactId>target-platform-configuration</artifactId>
				<configuration>
					<dependency-resolution>
						<extraRequirements>
							<!-- to get the org.eclipse.osgi.compatibility.state plugin if 
							the targeted Eclipse version (e.g., Luna) has it
							(backwards compatible with kepler and previous versions) -->
							<requirement>
								<type>eclipse-feature</type>
								<id>org.eclipse.rcp</id>
								<versionRange>0.0.0</versionRange>
							</requirement>
						</extraRequirements>
					</dependency-resolution>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>
