<!--
 -
 - 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>

  <artifactId>proton-tests</artifactId>
  <name>proton-tests</name>

  <parent>
    <groupId>org.apache.qpid</groupId>
    <artifactId>proton-project</artifactId>
    <version>0.10</version>
  </parent>

  <description>The Proton system tests execute against either the Java or the C implementations,
based on the chosen profile.

To execute, &quot;mvn test&quot;.

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

mvn test \
-Dproton.pythontest.pattern='proton_tests.transport.TransportTest.*' \
-Dproton.pythontest.invocations=20 \
-Dproton.pythontest.always_colorize=true \
-Dproton-c-build-dir=/path/to/build/dir

By default, the proton-jni profile looks for the JNI jar and native libraries under
directory &lt;basedir&gt;/build/proton-c.</description>

  <scm>
    <url>http://svn.apache.org/viewvc/qpid/proton/</url>
  </scm>

  <properties>
    <testReportOutputDirectory>${basedir}/target/surefire-reports</testReportOutputDirectory>
  </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}/../proton-c/bindings/python</protonJythonBinding>
            <protonJythonShim>${basedir}/../proton-j/src/main/resources</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>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.apache.qpid</groupId>
      <artifactId>proton-j</artifactId>
      <version>${project.parent.version}</version>
    </dependency>
    <dependency>
      <groupId>org.bouncycastle</groupId>
      <artifactId>bcpkix-jdk15on</artifactId>
      <version>1.47</version>
    </dependency>
    <dependency>
        <groupId>org.python</groupId>
        <artifactId>jython-standalone</artifactId>
        <version>2.5.3</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
