Пример #1
0
 /**
  * Get the RunnerInterface being used by the Peridot command.
  * If one is not set, a default Runner will be used.
  *
  * @return RunnerInterface
  */
 public function getRunner()
 {
     if ($this->runner === null) {
         $this->runner = new Runner($this->context->getCurrentSuite(), $this->getEventEmitter());
     }
     return $this->runner;
 }
<?php

use Peridot\EventEmitter;
use Peridot\Core\Context;
use Peridot\Core\Suite;
use Peridot\Reporter\AnonymousReporter;
use Peridot\Reporter\ReporterInterface;
use Peridot\Runner\Runner;
describe('AnonymousReporter', function () {
    beforeEach(function () {
        $this->eventEmitter = new EventEmitter();
        $this->output = new Symfony\Component\Console\Output\NullOutput();
        $this->context = Context::getInstance();
    });
    it('should call the init function passed in', function () {
        $output = null;
        $emitter = null;
        new AnonymousReporter(function (ReporterInterface $reporter) use(&$output, &$emitter) {
            $output = $reporter->getOutput();
            $emitter = $reporter->getEventEmitter();
        }, $this->output, $this->eventEmitter, $this->context);
        assert(!is_null($output) && !is_null($emitter), 'output, and emitter should not be null');
    });
});
Пример #3
0
 /**
  * Initialize the Context with the same event emitter as the Environment.
  *
  * @param EventEmitterInterface $emitter
  */
 protected function initializeContext(EventEmitterInterface $emitter)
 {
     $this->context = Context::getInstance();
     $this->context->setEventEmitter($emitter);
 }
<?php

use Peridot\EventEmitter;
use Peridot\Core\Suite;
use Peridot\Core\Context;
use Peridot\Reporter\AnonymousReporter;
use Peridot\Reporter\ReporterFactory;
use Peridot\Reporter\SpecReporter;
use Peridot\Runner\Runner;
describe('ReporterFactory', function () {
    beforeEach(function () {
        $output = new Symfony\Component\Console\Output\NullOutput();
        $this->factory = new ReporterFactory($output, new EventEmitter(), Context::getInstance());
    });
    describe('->create()', function () {
        context("using a valid reporter name", function () {
            it("should return an instance of the named reporter", function () {
                $reporter = $this->factory->create('spec');
                assert($reporter instanceof SpecReporter, "should create SpecReporter");
            });
            it("should return an anonymous reporter if callable used", function () {
                $this->factory->register('spec2', 'desc', function ($reporter) {
                });
                $reporter = $this->factory->create('spec2');
                assert($reporter instanceof AnonymousReporter, "should create AnonymousReporter");
            });
        });
        context("using a valid name with an invalid factory", function () {
            it("should throw an exception", function () {
                $this->factory->register('nope', 'doesnt work', 'Not\\A\\Class');
                $exception = null;
        });
        it('should output time', function () {
            $time = PHP_Timer::secondsToTimeString($this->reporter->getTime());
            assert(strstr($this->contents, $time) !== false, 'should contain time text');
        });
        it('should output failure text', function () {
            assert(strstr($this->contents, '1 failing') !== false, 'should contain failure text');
        });
        it('should output pending count', function () {
            assert(strstr($this->contents, '1 pending') !== false, 'should contain pending text');
        });
        it('should display exception stacks and messages', function () {
            $expectedExceptionMessage = "     ooops" . PHP_EOL . "     nextline";
            assert(strstr($this->contents, $expectedExceptionMessage) !== false, "should include exception message");
            $trace = preg_replace('/^#/m', "      #", $this->exception->getTraceAsString());
            assert(strstr($this->contents, $trace) !== false, "should include exception stack");
        });
        it('should honor peridot exception traces', function () {
            $output = new BufferedOutput();
            $emitter = new EventEmitter();
            $reporter = new SpecReporter($output, $emitter, Context::getInstance());
            $exception = new PeridotException('message');
            $exception->setTraceString('trace!!');
            $emitter->emit('test.failed', new Test('failing test', function () {
            }), $exception);
            $reporter->footer();
            $contents = $output->fetch();
            assert(strstr($contents, 'trace!!') !== false, 'should contain manually set trace');
        });
    });
});
Пример #6
0
            $this->context->addSetupFunction($before);
            $result = call_user_func($this->context->getCurrentSuite()->getSetupFunctions()[0]);
            assert("result" === $result, "expected addSetupFunction to register setup function");
        });
    });
    describe('->addTearDownFunction()', function () {
        it('should register an afterEach callback on the current suite', function () {
            $after = function () {
                return "result";
            };
            $this->context->addTearDownFunction($after);
            $result = call_user_func($this->context->getCurrentSuite()->getTearDownFunctions()[0]);
            assert("result" === $result, "expected addSetupFunction to register tear down function");
        });
    });
    describe('::getInstance()', function () {
        beforeEach(function () {
            $this->property = $this->reflection->getProperty('instance');
            $this->property->setAccessible(true);
            $this->previous = $this->property->getValue();
            $this->property->setValue(null);
        });
        afterEach(function () {
            $this->property->setValue($this->previous);
        });
        it("should return a singleton instance of Context", function () {
            $context = Context::getInstance();
            assert($context instanceof Context, "getInstance should return a Context");
        });
    });
});
Пример #7
0
/**
 * Add a tear down function for all specs in the
 * current suite
 *
 * @param callable $fn
 */
function afterEach(callable $fn)
{
    Context::getInstance()->addTearDownFunction($fn);
}