<!--
  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.
-->
<ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/CURRENT/core.xsd
      org.apache.felix.ipojo.extender http://felix.apache.org/ipojo/schemas/CURRENT/extender-pattern.xsd"
  xmlns="org.apache.felix.ipojo"
  xmlns:extender="org.apache.felix.ipojo.extender">
  <component
    classname="org.apache.felix.ipojo.junit4osgi.impl.JunitExtender">
    <extender:extender extension="Test-Suite"
      onArrival="onBundleArrival" onDeparture="onBundleDeparture" />
    <callback transition="invalidate" method="stopping" />
    <callback transition="validate" method="starting" />
    <requires field="m_log" optional="true" 
      default-implementation="org.apache.felix.ipojo.junit4osgi.impl.LogServiceImpl"/>
    <provides />
  </component>
  <instance
    component="org.apache.felix.ipojo.junit4osgi.impl.JunitExtender" />
</ipojo>
