Skip to content

Commit

Permalink
initial commit for integration test framework
Browse files Browse the repository at this point in the history
  • Loading branch information
sarnowski committed Apr 15, 2012
1 parent f1e1cee commit 561684d
Show file tree
Hide file tree
Showing 4 changed files with 154 additions and 0 deletions.
16 changes: 16 additions & 0 deletions _testing/integrationtests.xml
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
bootstrap="integrationtests/bootstrap.php"
convertNoticesToExceptions="false">

<testsuites>
<testsuite name="DokuWiki Integration Tests">
<directory suffix=".test.php">integrationtests/</directory>
</testsuite>
<testsuite name="Plugin Integration Tests">
<directory suffix=".inttest.php">../lib/plugins/*/_testing</directory>
</testsuite>
</testsuites>


</phpunit>
14 changes: 14 additions & 0 deletions _testing/integrationtests/basic/basic.test.php
@@ -0,0 +1,14 @@
<?php

class BasicTest extends PHPUnit_Framework_TestCase {
function testSimpleRun() {
$request = new TestRequest();

$response = $request->execute();

$this->assertTrue(
strpos($response->getContent(), 'DokuWiki') >= 0,
'DokuWiki was not a word in the output'
);
}
}
20 changes: 20 additions & 0 deletions _testing/integrationtests/basic/hooks.test.php
@@ -0,0 +1,20 @@
<?php

class HooksTest extends PHPUnit_Framework_TestCase {

var $hookTriggered = false;

function hookTriggered() {
$this->hookTriggered = true;
}

function testHookTriggering() {
global $EVENT_HANDLER;
$EVENT_HANDLER->register_hook('TPL_CONTENT_DISPLAY', 'AFTER', $this, 'hookTriggered');

$request = new TestRequest();
$request->execute();

$this->assertTrue($this->hookTriggered, 'Hook was not triggered as expected!');
}
}
104 changes: 104 additions & 0 deletions _testing/integrationtests/bootstrap.php
@@ -0,0 +1,104 @@
<?php

/**
* Integration Test Library for DokuWiki
*
* Simulates a full DokuWiki HTTP Request and allows
* runtime inspection.
*/

// load dw
define('DOKU_INC', dirname(dirname(dirname(__FILE__))).'/');
require_once(DOKU_INC.'inc/init.php');

// output buffering
$output_buffer = '';

function ob_start_callback($buffer) {
global $output_buffer;
$output_buffer .= $buffer;
}

// Helper class to execute a fake request
class TestRequest {
var $server_vars = array(
'REMOTE_ADDR' => '127.0.0.1',
);

var $get_vars = array();
var $post_vars = array();

var $output = '';

function __construct($page = '') {
$this->setPage($page);
}

function setServerVar($varName, $varValue) {
$this->sevrer_vars[$varName] = $varValue;
}

function setGetVar($varName, $varValue) {
$this->get_vars[$varName] = $varValue;
}

function setPostVar($varName, $varValue) {
$this->post_vars[$varName] = $varValue;
}

function setPage($pageName) {
$this->setGetVar('id', $pageName);
}

function execute() {
global $output_buffer;
$output_buffer = '';

// fake php environment
foreach ($this->server_vars as $key => $value) {
$_SERVER[$key] = $value;
}
$_REQUEST = array();
$_GET = array();
foreach ($this->get_vars as $key => $value) {
$_GET[$key] = $value;
$_REQUEST[$key] = $value;
}
$_POST = array();
foreach ($this->post_vars as $key => $value) {
$_POST[$key] = $value;
$_REQUEST[$key] = $value;
}

// now execute dokuwiki and grep the output
header_remove();
ob_start('ob_start_callback');
include(DOKU_INC.'doku.php');
ob_end_flush();

// it's done, return the page result
return new TestResponse(
$output_buffer,
headers_list()
);
}
}

// holds a copy of all produced outputs of a TestRequest
class TestResponse {
var $content;
var $headers;

function __construct($content, $headers) {
$this->content = $content;
$this->headers = $headers;
}

function getContent() {
return $this->content;
}

function getHeaders() {
return $this->headers;
}
}

0 comments on commit 561684d

Please sign in to comment.