<!--
 -
 - 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.28.1</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>
      <version>1.53</version>
    </dependency>
    <dependency>
        <groupId>org.python</groupId>
        <artifactId>jython-standalone</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
