<?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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

<!-- ====================================================================== -->
<!-- P R O J E C T  D E S C R I P T I O N                                   -->
<!-- ====================================================================== -->
  <parent>
    <groupId>org.apache.jackrabbit</groupId>
    <artifactId>jackrabbit-parent</artifactId>
    <version>2.19.3-SNAPSHOT</version>
    <relativePath>../jackrabbit-parent/pom.xml</relativePath>
  </parent>
  <artifactId>jackrabbit-spi2dav</artifactId>
  <name>Jackrabbit SPI to WebDAV</name>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <skip>true</skip>
          <includes>
            <include>**/TestAll.java</include>
          </includes>
          <forkMode>once</forkMode>
          <argLine>${test.opts}</argLine>
          <systemProperties>
            <property>
              <name>known.issues</name>
              <value>
                  <!--

                  This is the list of failing TCK and jcr2spi tests in a jcr2spi - spi2davex setup.

                  A comprehensive list of missing JCR 2.0 features can be found at
                  https://issues.apache.org/jira/browse/JCR-2003

                  Known issues of jcr2spi and spi2dav(ex) are listed at
                  https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+JCR+AND+component+%3D+jackrabbit-jcr2spi+AND+status+%3D+Open+ORDER+BY+priority+DESC&mode=hide
                  https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+JCR+AND+component+%3D+jackrabbit-spi2dav+AND+status+%3D+Open+ORDER+BY+priority+DESC&mode=hide

                  -->
                  <!-- ***** PLEASE update jcr2dav/pom.xml as well ********* -->
                  <!-- wrong exception: ConstraintViolationEx. instead SAXException/InvalidSerializedDataEx.-->
                  org.apache.jackrabbit.test.api.SerializationTest#testNodeTypeConstraintViolationWorkspace
                  <!-- JCR-2538 : impersonation not implemented -->
                  org.apache.jackrabbit.test.api.ImpersonateTest
                  <!-- JCR-2099 : shareable nodes -->
                  org.apache.jackrabbit.test.api.ShareableNodeTest
                  <!-- JCR-2228 : life cycle management -->
                  org.apache.jackrabbit.test.api.LifecycleTest
                  <!-- lock token transfer -->
                  org.apache.jackrabbit.test.api.lock.LockManagerTest#testAddInvalidLockToken
                  org.apache.jackrabbit.test.api.lock.LockManagerTest#testAddLockTokenToAnotherSession
                  org.apache.jackrabbit.test.api.lock.LockManagerTest#testLockTransfer2
                  <!-- JCR-2533 : missing impl of checkQueryStatement -->
                  org.apache.jackrabbit.test.api.query.CreateQueryTest#testUnknownQueryLanguage
                  <!-- JCR-2533 : missing impl of checkQueryStatement -->
                  org.apache.jackrabbit.test.api.query.qom.BindVariableValueTest
                  <!-- JCR-2112 : simple versioning not implemented -->
                  org.apache.jackrabbit.test.api.version.simple
                  <!-- JCR-2104 : activities and configuration -->
                  org.apache.jackrabbit.test.api.version.ActivitiesTest
                  org.apache.jackrabbit.test.api.version.MergeActivityTest#testMergeActivity
                  org.apache.jackrabbit.test.api.version.ConfigurationsTest
                  <!-- JCR-2560 -->
                  org.apache.jackrabbit.jcr2spi.IsSameTest#testIsSameProperty3
                  org.apache.jackrabbit.jcr2spi.IsSameTest#testIsSameProperty4
                  org.apache.jackrabbit.jcr2spi.IsSameTest#testIsSameNode7
                  <!-- Known, general issue of the Jcr2Spi - SPI setup.
                       No notification about changes to registered namespace(s) -->                         
                  org.apache.jackrabbit.jcr2spi.name.NamespaceRegistryTest#testReRegisteredNamespace
                  org.apache.jackrabbit.jcr2spi.name.NamespaceRegistryTest#testReRegisteredNamespaceVisibility
              </value>
            </property>
          </systemProperties>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <descriptors>
                <descriptor>assembly.xml</descriptor>
              </descriptors>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-spi</artifactId>
      <version>${project.version}</version>
      <classifier />
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-spi-commons</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-jcr-commons</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-webdav</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>javax.jcr</groupId>
      <artifactId>jcr</artifactId>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpmime</artifactId>
      <version>4.5.8</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-jcr-tests</artifactId>
      <version>${project.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-jcr2spi</artifactId>
      <version>${project.version}</version>
      <classifier />
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-jcr2spi</artifactId>
      <version>${project.version}</version>
      <classifier>tests</classifier>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-spi</artifactId>
      <classifier>tests</classifier>
      <version>${project.version}</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
