#
# Properties file indicating the boot (or mandatory) bundles that are loaded
# by the testing framework.
#
# Normally, this file should not be edited since it is used by the testing infrastructure.
# Users that want to install bundles before starting a test, should use #bundles() method.
#

# elements that have to be ignored should star with
# ignore

# Note: inner placeholders are not supported. 

#
# common properties
#

# versioning
ignore.junit.version=4.12_1
ignore.logback.version=1.0.13

ignore.spring.version=4.3.6.RELEASE_1
ignore.gemini.blueprint.version=${project.version}
ignore.slf4j.version=1.7.5
ignore.assertj.version=3.6.2

# groupIds
ignore.servicemix.bundles.groupId=org.apache.servicemix.bundles
ignore.gemini.blueprint.groupId=org.eclipse.gemini.blueprint
ignore.slf4j.groupId=org.slf4j
ignore.logback.groupId=ch.qos.logback

#
# actual libraries
#
# listed in dependency order to ease deployment

# dependencies
# junit
org.apache.servicemix.bundles,org.apache.servicemix.bundles.junit,${ignore.junit.version}=
# slf4j
${ignore.slf4j.groupId},slf4j-api,${ignore.slf4j.version}=
${ignore.slf4j.groupId},jcl-over-slf4j,${ignore.slf4j.version}=
${ignore.logback.groupId},logback-core,${ignore.logback.version}=
${ignore.logback.groupId},logback-classic,${ignore.logback.version}=

# aop alliance
${ignore.servicemix.bundles.groupId},${ignore.servicemix.bundles.groupId}.aopalliance,1.0_6=

# AssertJ for using AssertJ-assertions in OSGi test bundles at runtime
org.assertj,assertj-core,${ignore.assertj.version}=

# spring libs
${ignore.servicemix.bundles.groupId},${ignore.servicemix.bundles.groupId}.spring-beans,${ignore.spring.version}=
${ignore.servicemix.bundles.groupId},${ignore.servicemix.bundles.groupId}.spring-core,${ignore.spring.version}=
${ignore.servicemix.bundles.groupId},${ignore.servicemix.bundles.groupId}.spring-context,${ignore.spring.version}=
${ignore.servicemix.bundles.groupId},${ignore.servicemix.bundles.groupId}.spring-expression,${ignore.spring.version}=
${ignore.servicemix.bundles.groupId},${ignore.servicemix.bundles.groupId}.spring-aop,${ignore.spring.version}=
${ignore.servicemix.bundles.groupId},${ignore.servicemix.bundles.groupId}.spring-test,${ignore.spring.version}=

# gemini blueprint libs
${ignore.gemini.blueprint.groupId},gemini-blueprint-io,${ignore.gemini.blueprint.version}=
${ignore.gemini.blueprint.groupId},gemini-blueprint-core,${ignore.gemini.blueprint.version}=
${ignore.gemini.blueprint.groupId},gemini-blueprint-extender,${ignore.gemini.blueprint.version}=
${ignore.gemini.blueprint.groupId},gemini-blueprint-test,${ignore.gemini.blueprint.version}=