#    Licensed 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.

Bundle-Description: Integration Test bundle for the CDI Extender
Export-Package: ${p}.cases.*,${p}.interfaces.*
Test-Cases: ${classes;CONCRETE;ANNOTATED;org.junit.Test}

##
## All of remainder is to make bnd's `-make` function work in our maven project.
##

# We need to define a root package so we can split the classpath contents into many `sub-bundles`.
p = org.apache.aries.cdi.test

# This is the instruction containing the make recipe and the recipe dir pattern for finding the bnd files.
-make: (*).(jar); type=bnd; recipe="${.}/bnd/$1.bnd"

# Finally, include the `-make'd` jars in the test bundle. This also happens to trigger the make function
# so don't forget to list new jars here as new bnd files are added into the recipe dir.
-includeresource:\
	basic-beans.jar,\
	services-one.jar,\
	tb1.jar,\
	tb2.jar,\
	tb3.jar,\
	tb5.jar,\
	tb6.jar,\
	tb7.jar,\
	tb8.jar,\
	tb9.jar,\
	tb10.jar,\
	tb11.jar,\
	tb152_2.jar,\
	tb152_2b.jar,\
	tb152_3.jar,\
	tb152_3_1.jar,\
	tb152_3_1_1a.jar,\
	tb152_3_1_1b.jar,\
	tb152_3_1_1c.jar,\
	tb152_3_1_1d.jar,\
	tb152_3_1_1e.jar,\
	tb152_3_1_1f.jar,\
	tb152_3_1_1g.jar,\
	tb152_3_1_1h.jar,\
	tb152_3_1_1i.jar,\
	tb152_3_1_1j.jar,\
	tb152_3_1_1k.jar,\
	tb152_3_1_1l.jar,\
	tb12.jar,\
	tb13.jar,\
	tb14.jar,\
	tb16.jar,\
	tb17.jar,\
	tb18.jar,\
	tb19.jar,\
	tb20.jar,\
	tb21.jar,\
	tb22.jar

# Don't forget that we had to coax the `maven-jar-plugin` NOT to include the `sub-bundle` packages in
# the root bundle:
#
# 				<artifactId>maven-jar-plugin</artifactId>
#				<configuration>
#					<includes>
#						<include>META-INF/*</include>
#						<include>OSGI-INF/*</include>
#						<include>OSGI-OPT/*</include>
#						<!-- List all the packages we want to keep in the root bundle. -->
#						<include>org/apache/aries/cdi/test/cases/*</include>
#						<include>org/apache/aries/cdi/test/components/*</include>
#						<!-- Make sure to include all the sub-bundles we created. -->
#						<include>*.jar</include>
#					</includes>
#				</configuration>
