Browse Source

Change inner workings of test runner to use different bootstrap file when testing the core.

Franz Liedke 12 years ago
parent
commit
41ff7af213
3 changed files with 51 additions and 33 deletions
  1. 0 24
      laravel/cli/tasks/test/phpunit.php
  2. 19 9
      laravel/cli/tasks/test/runner.php
  3. 32 0
      laravel/tests/phpunit.php

+ 0 - 24
laravel/cli/tasks/test/phpunit.php

@@ -1,12 +1,4 @@
 <?php
-/**
- * Laravel - A PHP Framework For Web Artisans
- *
- * @package  Laravel
- * @version  3.0.0
- * @author   Taylor Otwell <taylorotwell@gmail.com>
- * @link     http://laravel.com
- */
 
 // --------------------------------------------------------------
 // Define the directory separator for the environment.
@@ -18,22 +10,6 @@ define('DS', DIRECTORY_SEPARATOR);
 // --------------------------------------------------------------
 require 'paths.php';
 
-// --------------------------------------------------------------
-// Override the application paths when testing the core.
-// --------------------------------------------------------------
-$config = file_get_contents('phpunit.xml');
-
-if (strpos($config, 'laravel-tests') !== false)
-{
-	$path = path('bundle').'laravel-tests'.DS;
-
-	set_path('app', $path.'application'.DS);
-
-	set_path('bundle', $path.'bundles'.DS);
-
-	set_path('storage', $path.'storage'.DS);
-}
-
 // --------------------------------------------------------------
 // Bootstrap the Laravel core.
 // --------------------------------------------------------------

+ 19 - 9
laravel/cli/tasks/test/runner.php

@@ -7,6 +7,15 @@ use Laravel\CLI\Tasks\Task;
 
 class Runner extends Task {
 
+	/**
+	 * The base directory where the tests will be executed.
+	 *
+	 * A phpunit.xml should also be stored in that directory.
+	 * 
+	 * @var string
+	 */
+	protected $base_path;
+
 	/**
 	 * Run all of the unit tests for the application.
 	 *
@@ -26,7 +35,8 @@ class Runner extends Task {
 	 */
 	public function core()
 	{
-		$this->stub(path('sys').'tests/cases');
+		$this->base_path = path('sys').'tests'.DS;
+		$this->stub(path('sys').'tests'.DS.'cases');
 
 		$this->test();
 	}
@@ -44,6 +54,8 @@ class Runner extends Task {
 			$bundles = Bundle::names();
 		}
 
+		$this->base_path = path('sys').'cli'.DS.'tasks'.DS.'test'.DS;
+
 		foreach ($bundles as $bundle)
 		{
 			// To run PHPUnit for the application, bundles, and the framework
@@ -67,9 +79,9 @@ class Runner extends Task {
 	protected function test()
 	{
 		// We'll simply fire off PHPUnit with the configuration switch
-		// pointing to our temporary configuration file. This allows
+		// pointing to our requested configuration file. This allows
 		// us to flexibly run tests for any setup.
-		$path = path('base').'phpunit.xml';
+		$path = 'phpunit.xml';
 		
 		// fix the spaced directories problem when using the command line
 		// strings with spaces inside should be wrapped in quotes.
@@ -97,7 +109,7 @@ class Runner extends Task {
 		// locations depending on what the developer wants to test.
 		foreach (array('bootstrap', 'directory') as $item)
 		{
-			$stub = $this->{"swap_{$item}"}($stub, $path, $directory);
+			$stub = $this->{"swap_{$item}"}($stub, $directory);
 		}
 
 		File::put(path('base').'phpunit.xml', $stub);
@@ -107,24 +119,22 @@ class Runner extends Task {
 	 * Swap the bootstrap file in the stub.
 	 *
 	 * @param  string  $stub
-	 * @param  string  $path
 	 * @param  string  $directory
 	 * @return string
 	 */
-	protected function swap_bootstrap($stub, $path, $directory)
+	protected function swap_bootstrap($stub, $directory)
 	{
-		return str_replace('{{bootstrap}}', $path.'phpunit.php', $stub);
+		return str_replace('{{bootstrap}}', $this->base_path.'phpunit.php', $stub);
 	}
 
 	/**
 	 * Swap the directory in the stub.
 	 *
 	 * @param  string  $stub
-	 * @param  string  $path
 	 * @param  string  $directory
 	 * @return string
 	 */
-	protected function swap_directory($stub, $path, $directory)
+	protected function swap_directory($stub, $directory)
 	{
 		return str_replace('{{directory}}', $directory, $stub);
 	}

+ 32 - 0
laravel/tests/phpunit.php

@@ -0,0 +1,32 @@
+<?php
+
+// --------------------------------------------------------------
+// Define the directory separator for the environment.
+// --------------------------------------------------------------
+define('DS', DIRECTORY_SEPARATOR);
+
+// --------------------------------------------------------------
+// Set the core Laravel path constants.
+// --------------------------------------------------------------
+require 'paths.php';
+
+// --------------------------------------------------------------
+// Override the application paths when testing the core.
+// --------------------------------------------------------------
+$path = path('sys').'tests'.DS;
+
+set_path('app', $path.'application'.DS);
+
+set_path('bundle', $path.'bundles'.DS);
+
+set_path('storage', $path.'storage'.DS);
+
+// --------------------------------------------------------------
+// Bootstrap the Laravel core.
+// --------------------------------------------------------------
+require path('sys').'core.php';
+
+// --------------------------------------------------------------
+// Start the default bundle.
+// --------------------------------------------------------------
+Laravel\Bundle::start(DEFAULT_BUNDLE);