<?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.

-->
<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.apache.royale.framework</groupId>
    <artifactId>royale-framework-parent</artifactId>
    <version>0.9.9-SNAPSHOT</version>
  </parent>

  <artifactId>testsuite</artifactId>
  <version>0.9.9-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>Apache Royale: Testsuite</name>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-invoker-plugin</artifactId>
        <version>3.2.1</version>
        <configuration>
          <!-- Define the place the projects are copied to and executed in -->
          <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
          <!-- Global settings file used by all tests -->
          <settingsFile>src/it/settings.xml</settingsFile>
          <!--
            Defines the location of the maven local repo
            of all artifacts needed by the tests
          -->
          <localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>
          <!-- Runs a test for every pom.xml down two levels from the base directory -->
          <pomIncludes>*/*/pom.xml</pomIncludes>
          <!--
            Define the variables the plugin should replace
            The plugin will replace any occurrence of '@variable.name@' by
            the value of '<variable.name>...</variable.name>'
          -->
          <filterProperties>
            <flash.version>${flash.version}</flash.version>
            <air.version>${air.version}</air.version>
            <project.royale.compiler.version>${project.royale.compiler.version}</project.royale.compiler.version>
            <royale.typedefs.version>${royale.typedefs.version}</royale.typedefs.version>
            <royale.framework.version>${project.version}</royale.framework.version>
            <royale.build-tools.version>${royale.build-tools.version}</royale.build-tools.version>
          </filterProperties>

          <!-- Name of the verify script used to check if a test is successfull -->
          <postBuildHookScript>verify</postBuildHookScript>
          <!-- Add the test-dependencies of this module to the classpath of the tests -->
          <addTestClassPath>true</addTestClassPath>
        </configuration>
        <executions>
          <execution>
            <id>integration-test</id>
            <goals>
              <goal>install</goal>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-model</artifactId>
      <version>3.3.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-core</artifactId>
      <version>1.3</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

</project>
