<?php
/**
 * @file
 *   MyAwesomeExtension.php
 *
 * @author: marand
 *
 * @copyright (c) 2014 Ouest Systèmes Informatiques (OSInet).
 *
 * @license General Public License version 2 or later
 */

use Behat\Behat\Context\BehatContext;
use Behat\Behat\Context\ClassGuesser\ClassGuesserInterface;
use Behat\Behat\Context\ContextInterface;
use Behat\Behat\Context\Initializer\InitializerInterface;
use Behat\Behat\Extension\Extension;
use Behat\Mink\Mink;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;

class MyAwesomeExtension extends Extension {
  public function load(array $config, ContainerBuilder $container) {
    print_r($config);
    $loader = new XmlFileLoader($container, new FileLocator(__DIR__));
    $loader->load('services.xml');
  }
}

class YourCustomContext extends BehatContext {

  /**
   * @beforeSuite
   */
  public static function bS() {
    echo __METHOD__ . "\n";
  }
}

class MinkAwareInitializer implements InitializerInterface {
  private $mink;

  public function __construct(Mink $mink) {
    $this->mink = $mink;
  }

  public function supports(ContextInterface $context) {
    // in real life you should use interface for that
    return method_exists($context, 'setMink');
  }

  public function initialize(ContextInterface $context) {
    $context->setMink($this->mink);
  }
}

class MinkContextClassGuesser implements ClassGuesserInterface {
  public function guess() {
    return "YourCustomContext";
  }
}

#return new MyAwesomeExtension();