<?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.
-->
<!--
  @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
-->
<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.directory.studio</groupId>
    <artifactId>org.apache.directory.studio.tests-parent</artifactId>
    <version>2.0.0-SNAPSHOT</version>
    <relativePath>../</relativePath>
  </parent>
  
  <artifactId>org.apache.directory.studio.test.integration.ui</artifactId>
  <name>Apache Directory Studio UI Integration Tests</name>
  <packaging>eclipse-test-plugin</packaging>
  <description />

  <!-- 
    UI tests using SWTBot are not yet fully working. By default test execution
    is disabled but can be activated with property -Denable-ui-tests
   -->
  <properties>
    <skip-ui-tests>true</skip-ui-tests>
    <os-jvm-flags/>
  </properties>

  <profiles>
    <profile>
      <id>enable-ui-tests</id>
      <activation>
        <property>
          <name>enable-ui-tests</name>
        </property>
      </activation>
      <properties>
        <skip-ui-tests>false</skip-ui-tests>
      </properties>
    </profile>
    <profile>
      <id>macosx-jvm-flags</id>
      <activation>
        <os><family>mac</family></os>
      </activation>
      <properties>
        <os-jvm-flags>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</os-jvm-flags>
      </properties>
    </profile>
  </profiles>


  <build>
    <plugins>
      <plugin>
        <groupId>org.eclipse.tycho</groupId>
        <artifactId>target-platform-configuration</artifactId>
        <configuration>
          <dependency-resolution>
            <extraRequirements>
              <requirement>
                <type>eclipse-feature</type>
                <id>org.eclipse.rcp</id>
                <versionRange>0.0.0</versionRange>
              </requirement>
              <requirement>
                <type>eclipse-feature</type>
                <id>org.eclipse.platform</id>
                <versionRange>0.0.0</versionRange>
              </requirement>
              <requirement>
                <type>eclipse-feature</type>
                <id>org.apache.directory.studio.rcp.feature</id>
                <versionRange>0.0.0</versionRange>
              </requirement>
            </extraRequirements>
          </dependency-resolution>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.eclipse.tycho</groupId>
        <artifactId>tycho-surefire-plugin</artifactId>
        <version>${tycho.version}</version>
        <configuration>
          <skip>${skip-ui-tests}</skip>
          <includes>
            <include>**/*Test.java</include>
<!--             <include>**/ApacheDSPluginTest.java</include> -->
<!--             <include>**/BrowserTest.java</include> -->
<!--             <include>**/EntryEditorTest.java</include> -->
<!--             <include>**/ImportExportTest.java</include> -->
<!--             <include>**/NewConnectionWizardTest.java</include> -->
<!--             <include>**/NewEntryWizardTest.java</include> -->
<!--             <include>**/PreferencesTest.java</include> -->
<!--             <include>**/ReferralDialogTest.java</include> -->
<!--             <include>**/RenameEntryDialogTest.java</include> -->
<!--             <include>**/SearchTest.java</include> -->
<!--             <include>**/SwtResourcesTest.java</include> -->
          </includes>
          <useUIHarness>true</useUIHarness>
          <useUIThread>false</useUIThread>
          <appArgLine>-nl en -debug debugoptions</appArgLine>
          <argLine>${os-jvm-flags} -Dorg.eclipse.swtbot.search.timeout=10000</argLine>
          <!-- TODO: Run tests in Studio RCP app only, or in full IDE, or both? -->
<!--           <product>org.eclipse.sdk.ide</product> -->
<!--           <application>org.eclipse.ui.ide.workbench</application> -->
          <product>org.apache.directory.studio.rcp.product</product>
          <application>org.apache.directory.studio.rcp.application</application>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
