#
# 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.9.0
ignore.logback.version=1.0.13

ignore.spring.version=4.2.4.RELEASE_1
ignore.gemini.blueprint.version=2.0.0.RELEASE
ignore.slf4j.version=1.7.5
ignore.asm.version=2.2.3

# 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.junit,com.springsource.org.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=

# asm
org.objectweb.asm,com.springsource.org.objectweb.asm,${ignore.asm.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}=