silverstripe-cms/tests/behat/features/bootstrap/SilverStripe/Cms/Test/Behaviour/ThemeContext.php
Sam Minnee bbc3aaaf9f MINOR: Remove training whitespace.
The main benefit of this is so that authors who make use of
.editorconfig don't end up with whitespace changes in their PRs.

Spaces vs. tabs has been left alone, although that could do with a
tidy-up in SS4 after the switch to PSR-1/2.

The command used was this:

for match in '*.ss' '*.css' '*.scss' '*.html' '*.yml' '*.php' '*.js' '*.csv' '*.inc' '*.php5'; do
	find . -path ./thirdparty -prune -o -type f -name "$match" -exec sed -i '' 's/[[:space:]]\+$//' {} \+
	find . -path ./thirdparty -prune -o -type f -name "$match" | xargs perl -pi -e 's/ +$//'
done
2016-01-07 10:32:05 +13:00

110 lines
3.2 KiB
PHP

<?php
namespace SilverStripe\Cms\Test\Behaviour;
use Behat\Behat\Context\ClosuredContextInterface,
Behat\Behat\Context\TranslatedContextInterface,
Behat\Behat\Context\BehatContext,
Behat\Behat\Context\Step,
Behat\Behat\Event\StepEvent,
Behat\Behat\Exception\PendingException,
Behat\Mink\Driver\Selenium2Driver,
Behat\Gherkin\Node\PyStringNode,
Behat\Gherkin\Node\TableNode;
// PHPUnit
require_once 'PHPUnit/Autoload.php';
require_once 'PHPUnit/Framework/Assert/Functions.php';
/**
* Context used to create fixtures in the SilverStripe ORM.
*/
class ThemeContext extends BehatContext {
protected $restoreFiles = array();
protected $restoreDirectories = array();
/**
* Create a test theme
*
* @Given /^a theme "(?<theme>[^"]+)"/
*/
public function stepCreateTheme($theme) {
if(!preg_match('/^[0-9a-zA-Z_-]+$/', $theme)) throw new \InvalidArgumentException("Bad theme '$theme'");
$this->requireDir(BASE_PATH . '/themes');
$this->requireDir(BASE_PATH . '/themes/' . $theme);
$this->requireDir(BASE_PATH . '/themes/' . $theme . '/templates');
}
/**
* Create a template within a test theme
*
* @Given /^a template "(?<template>[^"]+)" in theme "(?<theme>[^"]+)" with content "(?<content>[^"]+)"/
*/
public function stepCreateTemplate($template, $theme, $content) {
if(!preg_match('/^[0-9a-zA-Z_-]+$/', $theme)) throw new \InvalidArgumentException("Bad theme '$theme'");
if(!preg_match('/^(Layout\/)?[0-9a-zA-Z_-]+\.ss$/', $template)) throw new \InvalidArgumentException("Bad template '$template'");
$this->stepCreateTheme($theme);
$this->requireFile(BASE_PATH . '/themes/' . $theme . '/templates/' . $template, $content);
}
protected function requireFile($filename, $content) {
// Already exists
if(file_exists($filename)) {
// If the content is different, remember old content for restoration
$origContent = file_get_contents($filename);
if($origContent != $content) {
file_put_contents($filename, $content);
$this->restoreFiles[$filename] = $origContent;
}
// Doesn't exist, mark it for deletion after test
} else {
file_put_contents($filename, $content);
$this->restoreFiles[$filename] = null;
}
}
protected function requireDir($dirname) {
// Directory doesn't exist, create it and mark it for deletion
if(!file_exists($dirname)) {
mkdir($dirname);
$this->restoreDirectories[] = $dirname;
}
}
/**
* Clean up any theme manipulation
*
* @AfterScenario
*/
public function cleanThemesAfterScenario() {
// Restore any created/modified files.
// - If modified, revert then to original contnet
// - If created, delete them
if($this->restoreFiles) {
foreach($this->restoreFiles as $file => $origContent) {
if($origContent === null) {
unlink($file);
} else {
file_put_contents($file, $origContent);
}
}
$this->restoreFiles = array();
}
// Restore any created directories: that is, delete them
if($this->restoreDirectories) {
// Flip the order so that nested direcotires are unlinked() first
$this->restoreDirectories = array_reverse($this->restoreDirectories);
foreach($this->restoreDirectories as $dir) {
rmdir($dir);
}
$this->restoreDirectories = array();
}
}
}