<!--
  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">
    <parent>
        <groupId>org.apache.felix</groupId>
        <artifactId>felix-parent</artifactId>
        <version>2.1</version>
        <relativePath>../../../pom/pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>org.apache.felix.ipojo.runtime.composite-it</artifactId>
    <version>1.12.2-SNAPSHOT</version>
    <name>Apache Felix iPOJO Runtime Project ~ Composite Integration Tests</name>
    <packaging>pom</packaging>

    <properties>
        <!-- Tests are enabled only when the 'test' profile is activated  -->
        <skipTestExecution>true</skipTestExecution>

        <exam.version>3.0.1</exam.version>
        <url.version>1.5.1</url.version>

        <felix.version>4.2.0</felix.version>
        <equinox.version>3.8.1.v20120830-144521</equinox.version>
        <knoperflerfish.version>5.3.3</knoperflerfish.version>

        <manipulator.version>1.12.1</manipulator.version>
    </properties>

    <modules>
        <module>ipojo-composite-runtime-test</module>
        <module>ipojo-composite-import-export-test</module>
        <module>ipojo-composite-instance-test</module>
        <module>ipojo-composite-service-providing-test</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.14.1</version>
                <configuration>
                    <systemPropertyVariables>
                        <!-- TIME_FACTOR can be set from the command line with -DTIME_FACTOR=9-->
                        <TIME_FACTOR>${TIME_FACTOR}</TIME_FACTOR>
                    </systemPropertyVariables>
                    <skipTests>${skipTestExecution}</skipTests>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.servicemix.tooling</groupId>
                <artifactId>depends-maven-plugin</artifactId>
                <version>1.2</version>
                <executions>
                    <execution>
                        <id>generate-config</id>
                        <goals>
                            <goal>generate-depends-file</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>verify</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!-- check src only (except remote resources additions) -->
                    <includes>
                        <include>src/**</include>
                    </includes>
                    <excludes>
                        <exclude>src/main/appended-resources/**</exclude>
                        <exclude>**/*.iml</exclude>
                        <!-- Exclude iml files -->
                        <!-- Exclude target folders that may have been created during
                         the integration-tests -->
                        <exclude>src/it/**/target/**/*</exclude>
                    </excludes>
                </configuration>
            </plugin>

            <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>

    </build>

    <dependencies>
        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-container-native</artifactId>
            <version>${exam.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-junit4</artifactId>
            <version>${exam.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-link-mvn</artifactId>
            <version>${exam.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.ops4j.pax.url</groupId>
            <artifactId>pax-url-aether</artifactId>
            <version>${url.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.0</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.0</version>
            <scope>test</scope>
        </dependency>


        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>1.9.5</version>
        </dependency>

        <dependency>
            <groupId>org.ops4j.pax.tinybundles</groupId>
            <artifactId>tinybundles</artifactId>
            <version>1.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo</artifactId>
            <version>1.12.2-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo.composite</artifactId>
            <version>1.12.2-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo.manipulator</artifactId>
            <version>${manipulator.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.configadmin</artifactId>
            <version>1.8.0</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

        <dependency>
            <groupId>org.ow2.chameleon.testing</groupId>
            <artifactId>osgi-helpers</artifactId>
            <version>0.6.1</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.osgi</groupId>
                    <artifactId>org.osgi.core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.ow2.chameleon.testing</groupId>
            <artifactId>tinybundles-ipojo</artifactId>
            <version>0.3.0</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo.handler.eventadmin</artifactId>
            <!--
            We use the released version as we don't really have to do any behavioral test on the handler in the core
            test.
            -->
            <version>1.8.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.osgi</groupId>
                    <artifactId>org.osgi.core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.ops4j.pax.url</groupId>
            <artifactId>pax-url-wrap</artifactId>
            <version>1.5.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.framework</artifactId>
            <version>${felix.version}</version>
        </dependency>
    </dependencies>

    <profiles>
        <profile>
            <id>knopflerfish</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <property>
                    <name>pax.exam.framework</name>
                    <value>knopflerfish</value>
                </property>
            </activation>
            <properties>
                <pax.exam.framework>knopflerfish</pax.exam.framework>
            </properties>
            <repositories>
                <repository>
                    <id>knopflerfish-releases</id>
                    <url>http://www.knopflerfish.org/maven2</url>
                </repository>
            </repositories>
            <dependencies>
                <dependency>
                    <groupId>org.knopflerfish</groupId>
                    <artifactId>framework</artifactId>
                    <version>${knoperflerfish.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </profile>

        <profile>
            <id>equinox</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <property>
                    <name>pax.exam.framework</name>
                    <value>equinox</value>
                </property>
            </activation>
            <properties>
                <pax.exam.framework>equinox</pax.exam.framework>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.eclipse.tycho</groupId>
                    <artifactId>org.eclipse.osgi</artifactId>
                    <version>${equinox.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </profile>

        <profile>
            <id>felix</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <property>
                    <name>pax.exam.framework</name>
                    <value>felix</value>
                </property>
            </activation>
            <properties>
                <pax.exam.framework>felix</pax.exam.framework>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>org.apache.felix.framework</artifactId>
                    <version>${felix.version}</version>
                </dependency>
            </dependencies>
        </profile>

        <profile>
            <id>test</id>
            <properties>
                <skipTestExecution>false</skipTestExecution>
            </properties>
        </profile>
    </profiles>
</project>
