<!--
 -
 - 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.qpid</groupId>
    <artifactId>proton-j-parent</artifactId>
    <version>0.33.10</version>
  </parent>

  <artifactId>proton-tests</artifactId>
  <name>Proton-J Python Tests</name>

  <description>The Proton python system tests execute against the Java implementation, using Maven (via this pom).

To run the tests against proton-j, execute:

mvn test

Example of advanced usage (all of the -D flags are optional):

mvn test \
-Dproton.pythontest.pattern='proton_tests.transport.ClientTransportTest.*' \
-Dproton.pythontest.invocations=20 \
-Dproton.pythontest.always_colorize=true
  </description>

  <properties>
    <testReportOutputDirectory>${basedir}/target/surefire-reports</testReportOutputDirectory>
    <jacoco.skip>true</jacoco.skip>
  </properties>

  <build>
    <!-- System tests are arranged by language, hence the non-default location of the JUnit tests. -->
    <testSourceDirectory>java</testSourceDirectory>
    <resources>
      <resource><directory>resources</directory></resource>
    </resources>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <systemPropertyVariables>
            <protonJythonIgnoreFile>${basedir}/java/pythonTests.ignore</protonJythonIgnoreFile>
            <protonJythonTestRoot>${basedir}/python</protonJythonTestRoot>
            <protonJythonBinding>${basedir}/java/shim/binding</protonJythonBinding>
            <protonJythonShim>${basedir}/java/shim</protonJythonShim>
            <protonJythonTestScript>${basedir}/python/proton-test</protonJythonTestScript>
            <protonJythonTestXmlOutputDirectory>${testReportOutputDirectory}</protonJythonTestXmlOutputDirectory>
            <java.util.logging.config.file>${project.build.outputDirectory}/logging.properties</java.util.logging.config.file>
          </systemPropertyVariables>
         <reportsDirectory>${testReportOutputDirectory}</reportsDirectory>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-deploy-plugin</artifactId>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <configuration>
          <excludes>
            <exclude>java/pythonTests.ignore</exclude>
            <exclude>interop/*.amqp</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.apache.qpid</groupId>
      <artifactId>proton-j</artifactId>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.bouncycastle</groupId>
      <artifactId>bcpkix-jdk15on</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.python</groupId>
        <artifactId>jython-standalone</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
