<?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.v20210213-M16</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>
