<?xml version="1.0" encoding="UTF-8"?>
<!--#======================================================================= -->
<!--# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) -->
<!--# All rights reserved. This program and the accompanying materials -->
<!--# are made available under the terms of the Eclipse Public License 2.0  -->
<!--# which accompanies this distribution, and is available at -->
<!--# https://www.eclipse.org/legal/epl-2.0/    -->
<!--#                                           -->
<!--# SPDX-License-Identifier: EPL-2.0          -->
<!--# -->
<!--# Contributors: -->
<!--#     Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
<!--#======================================================================= -->

<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>
  <parent>
    <groupId>org.eclipse.osbp.ecview.core</groupId>
    <artifactId>org.eclipse.osbp.ecview.core</artifactId>
    <version>0.9.0-SNAPSHOT</version>
  </parent>
  <artifactId>org.eclipse.osbp.ecview.core.common.model.tests</artifactId>
  <packaging>eclipse-test-plugin</packaging>
  <description>Tests for core model</description>
	<build>
		<plugins>
			<plugin>
				<groupId>org.eclipse.tycho</groupId>
				<artifactId>tycho-surefire-plugin</artifactId>
				<configuration>
					<includes>
						<include>**/*Test.class</include>
					</includes>
					<failIfNoTests>false</failIfNoTests>
					<showEclipseLog>true</showEclipseLog>
					<!-- <argLine>${ui.test.vmargs}</argLine> -->
					<bundleStartLevel>
						<bundle>
							<id>org.eclipse.osgi</id>
							<level>-1</level>
							<autoStart>true</autoStart>
						</bundle>
						<bundle>
							<id>org.eclipse.equinox.common</id>
							<level>1</level>
							<autoStart>true</autoStart>
						</bundle>
						<bundle>
							<id>org.eclipse.equinox.ds</id>
							<level>2</level>
							<autoStart>true</autoStart>
						</bundle>
						<bundle>
							<id>org.eclipse.equinox.log</id>
							<level>1</level>
							<autoStart>true</autoStart>
						</bundle>
						<bundle>
							<id>org.eclipse.osgi.services</id>
							<level>1</level>
							<autoStart>true</autoStart>
						</bundle>
						<bundle>
							<id>org.eclipse.osbp.ecview.core.common.model.tests</id>
							<level>4</level>
							<autoStart>true</autoStart>
						</bundle>
					</bundleStartLevel>

					<dependencies>
						<!-- Plugins -->
						<dependency>
							<type>eclipse-plugin</type>
							<artifactId>org.eclipse.equinox.ds</artifactId>
							<version>0.0.0</version>
						</dependency>
						<dependency>
							<type>eclipse-plugin</type>
							<artifactId>org.eclipse.equinox.util</artifactId>
							<version>0.0.0</version>
						</dependency>
					</dependencies>

					<useUIHarness>false</useUIHarness>
					<useUIThread>false</useUIThread>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
