Pluf Framework

Pluf Framework Git Source Tree

Root/src/testrunner.php

1<?php
2/* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3/*
4# ***** BEGIN LICENSE BLOCK *****
5# This file is part of Plume Framework, a simple PHP Application Framework.
6# Copyright (C) 2001-2007 Loic d'Anterroches and contributors.
7#
8# Plume Framework is free software; you can redistribute it and/or modify
9# it under the terms of the GNU Lesser General Public License as published by
10# the Free Software Foundation; either version 2.1 of the License, or
11# (at your option) any later version.
12#
13# Plume Framework is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU Lesser General Public License for more details.
17#
18# You should have received a copy of the GNU Lesser General Public License
19# along with this program; if not, write to the Free Software
20# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21#
22# ***** END LICENSE BLOCK ***** */
23
24/**
25 * testrunner for your application.
26 */
27set_include_path(get_include_path().PATH_SEPARATOR.dirname(__FILE__));
28function usage($script)
29{
30 echo($script.' YourApp [path/to/config/file.php]'."\n");
31 echo(' If no config file given, will use the following:'."\n");
32 echo(' YourApp/conf/yourapp.test.php'."\n");
33 echo(' If you are using SQLite, we recommend the ":memory:" database.'."\n");
34 echo(' [installed apps]/Migrations/Install.php will be used to setup/teardown'."\n");
35 echo(' the database before/after the run.'."\n");
36}
37function e($m)
38{
39 echo($m."\n");
40}
41function getTestDirs($dir='./')
42{
43 $file = new DirectoryIterator($dir);
44 $res = array();
45 while ($file->valid()) {
46 if ($file->isDir() && !$file->isDot()) {
47 $res[] = $file->getPathName();
48 }
49 $file->next();
50 }
51 return $res;
52}
53
54function getTestFiles($dir='')
55{
56 $file = new DirectoryIterator($dir);
57 $res = array();
58 while ($file->valid()) {
59 if ($file->isFile() && substr($file->getPathName(), -4) == '.php') {
60 $class = str_replace(DIRECTORY_SEPARATOR, '_', substr($file->getPathName(), 0, -4));
61 $res[] = array($file->getPathName(), $class);
62 }
63 $file->next();
64 }
65 return $res;
66}
67if (PHP_SAPI == 'cli') {
68 // Get the application and then the configuration file
69 if ($argc < 2) {
70 usage($argv[0]);
71 exit(1);
72 }
73 $app = $argv[1];
74 if ($argc >= 3) {
75 $config = $argv[2];
76 } else {
77 $config = $app.'/conf/'.strtolower($app).'.test.php';
78 }
79} else {
80 echo('Error: This script can only be run from the command line.'."\n");
81 exit(1);
82}
83echo(sprintf('Application: %s ', $app));
84if (!file_exists($config)) {
85 echo(sprintf("\n".'Error, the config file does not exists: %s'."\n", $config));
86 exit(1);
87} else {
88 echo(sprintf('(%s)'."\n", $config));
89}
90define('IN_UNIT_TESTS', true);
91require 'Pluf.php';
92Pluf::start($config);
93
94$simple_test = Pluf::f('simple_test_path', false);
95if (false == $simple_test) {
96 e('Error, the path to the simple test framework is not defined.');
97 e('Download simple test from:');
98 e(' http://simpletest.sourceforge.net/');
99 e('Extract the archive on your system and set the "simple_test_path"');
100 e('configuration variable in your configuration file.');
101 e('For example: $cfg[\'simple_test_path\'] = \'/home/you/simpletest\'; ');
102 exit(1);
103}
104$testfolder = $app.'/Tests/';
105if (!file_exists($testfolder)) {
106 e(sprintf('The test folder does not exists: %s.', $app.'/Tests/'));
107 exit(1);
108}
109
110define('SIMPLE_TEST', $simple_test.'/');
111require_once(SIMPLE_TEST.'unit_tester.php');
112require_once(SIMPLE_TEST.'reporter.php');
113
114$files = getTestFiles($testfolder);
115$dirs = getTestDirs($testfolder);
116foreach ($dirs as $dir) {
117 foreach (getTestFiles($dir) as $test) {
118 $files[] = $test;
119 }
120}
121$test = &new GroupTest(sprintf('All tests for application %s.', $app));
122foreach ($files as $t) {
123 if (!function_exists('apc_store') && 'Pluf_Tests_Cache_Apc' === $t[1]) {
124 continue;
125 }
126 $test->addTestCase(new $t[1]());
127}
128$reporter = new TextReporter();
129$mig = new Pluf_Migration(null);
130$mig->display = false;
131$mig->install();
132// If available, load an initialisation file.
133if (file_exists($app.'/Tests/init.json')) {
134 $created = Pluf_Test_Fixture::loadFile($app.'/Tests/init.json');
135} else {
136 $created = array();
137}
138$test->run($reporter);
139$mig->unInstall();

Archive Download this file

Branches

Tags