Browse Source

added foundation of testing setup.

Taylor Otwell 12 years ago
parent
commit
6f2e83f284

+ 22 - 0
phpunit.php

@@ -0,0 +1,22 @@
+<?php
+
+// --------------------------------------------------------------
+// Overrride the application path if testing Laravel.
+// --------------------------------------------------------------
+foreach ($_SERVER['argv'] as $key => $argument)
+{
+	if ($argument == 'laravel' and $_SERVER['argv'][$key - 1] == '--group')
+	{
+		define('APP_PATH', realpath('tests/laravel').DIRECTORY_SEPARATOR);
+	}
+}
+
+// --------------------------------------------------------------
+// Set the core Laravel path constants.
+// --------------------------------------------------------------
+require 'paths.php';
+
+// --------------------------------------------------------------
+// Bootstrap the Laravel core.
+// --------------------------------------------------------------
+require SYS_PATH.'core.php';

+ 7 - 0
phpunit.xml

@@ -0,0 +1,7 @@
+<phpunit colors="false" bootstrap="phpunit.php">
+	<testsuites>
+		<testsuite name="Test Suite">
+			<directory suffix=".php">tests/cases</directory>
+		</testsuite>
+	</testsuites>
+</phpunit>

+ 0 - 0
tests/cases/application/.gitignore


+ 0 - 0
tests/cases/bundles/.gitignore


+ 15 - 0
tests/cases/laravel/str.php

@@ -0,0 +1,15 @@
+<?php
+
+class StrTest extends PHPUnit_Framework_TestCase {
+
+	/**
+	 * Test the Str::encoding method.
+	 *
+	 * @group laravel
+	 */
+	public function testEncodingShouldReturnApplicationEncoding()
+	{
+		$this->assertEquals('UTF-8', Config::get('application.encoding'));
+	}
+
+}

+ 42 - 0
tests/laravel/bundle.php

@@ -0,0 +1,42 @@
+<?php
+
+/*
+|--------------------------------------------------------------------------
+| Auto-Loader PSR-0 Directories
+|--------------------------------------------------------------------------
+|
+| The Laravel auto-loader can search directories for files using the PSR-0
+| naming convention. This convention basically organizes classes by using
+| the class namespace to indicate the directory structure.
+|
+| So you don't have to manually map all of your models, we've added the
+| models and libraries directories for you. So, you can model away and
+| the auto-loader will take care of the rest.
+|
+*/
+
+Autoloader::psr(array(
+	APP_PATH.'models',
+	APP_PATH.'libraries',
+));
+
+/*
+|--------------------------------------------------------------------------
+| Auto-Loader Mappings
+|--------------------------------------------------------------------------
+|
+| Laravel uses a simple array of class to path mappings to drive the class
+| auto-loader. This simple approach helps avoid the performance problems
+| of searching through directories by some kind of convention. It also
+| gives you the freedom to organize your application how you want.
+|
+| Registering a mapping couldn't be easier. Just pass an array of class
+| to path maps into the "map" function of Autoloader. Then, when you
+| want to use that class, just use it. It's a piece of cake.
+|
+*/
+
+Autoloader::map(array(
+	//'User' => APP_PATH.'models/user.php',
+	//'Role' => APP_PATH.'models/role.php',
+));

+ 1 - 0
tests/laravel/config/.gitignore

@@ -0,0 +1 @@
+local/*

+ 171 - 0
tests/laravel/config/application.php

@@ -0,0 +1,171 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Application URL
+	|--------------------------------------------------------------------------
+	|
+	| The URL used to access your application without a trailing slash. The URL
+	| does nto have to be set. If it isn't we'll try our best to guess the URL
+	| of your application.
+	|
+	*/
+
+	'url' => '',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Application Index
+	|--------------------------------------------------------------------------
+	|
+	| If you are including the "index.php" in your URLs, you can ignore this.
+	|
+	| However, if you are using mod_rewrite to get cleaner URLs, just set
+	| this option to an empty string and we'll take care of the rest.
+	|
+	*/
+
+	'index' => 'index.php',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Application Key
+	|--------------------------------------------------------------------------
+	|
+	| This key is used by the encryption and cookie classes to generate secure
+	| encrypted strings and hashes. It is extremely important that this key
+	| remain secret and should not be shared with anyone. Make it about 32
+	| characters of random gibberish.
+	|
+	*/
+
+	'key' => '',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Application Character Encoding
+	|--------------------------------------------------------------------------
+	|
+	| The default character encoding used by your application. This encoding
+	| will be used by the Str, Text, Form, and any other classes that need
+	| to know what type of encoding to use for your awesome application.
+	|
+	*/
+
+	'encoding' => 'UTF-8',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Application Language
+	|--------------------------------------------------------------------------
+	|
+	| The default language of your application. This language will be used by
+	| Lang library as the default language when doing string localization.
+	|
+	*/
+
+	'language' => 'en',
+
+	/*
+	|--------------------------------------------------------------------------
+	| SSL Link Generation
+	|--------------------------------------------------------------------------
+	|
+	| Many sites use SSL to protect their users data. However, you may not
+	| always be able to use SSL on your development machine, meaning all HTTPS
+	| will be broken during development.
+	|
+	| For this reason, you may wish to disable the generation of HTTPS links
+	| throughout your application. This option does just that. All attempts to
+	| generate HTTPS links will generate regular HTTP links instead.
+	|
+	*/
+
+	'ssl' => true,
+
+	/*
+	|--------------------------------------------------------------------------
+	| Application Timezone
+	|--------------------------------------------------------------------------
+	|
+	| The default timezone of your application. This timezone will be used when
+	| Laravel needs a date, such as when writing to a log file or travelling
+	| to a distant star at warp speed.
+	|
+	*/
+
+	'timezone' => 'UTC',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Autoloaded Bundles
+	|--------------------------------------------------------------------------
+	|
+	| Bundles can provide a ton of awesome drop-in functionality for your web
+	| application. Everything from Twitter integration to an admin backend.
+	|
+	| Here you may specify the bundles that should be automatically started
+	| on every request to your application.
+	|
+	*/
+
+	'bundles' => array(),
+
+	/*
+	|--------------------------------------------------------------------------
+	| Class Aliases
+	|--------------------------------------------------------------------------
+	|
+	| Here, you can specify any class aliases that you would like registered
+	| when Laravel loads. Aliases are lazy-loaded, so add as many as you want.
+	|
+	| Aliases make it more convenient to use namespaced classes. Instead of
+	| referring to the class using its full namespace, you may simply use
+	| the alias defined here.
+	|
+	| We have already aliased common Laravel classes to make your life easier.
+	|
+	*/
+
+	'aliases' => array(
+		'Auth'       => 'Laravel\\Auth',
+		'Asset'      => 'Laravel\\Asset',
+		'Autoloader' => 'Laravel\\Autoloader',
+		'Bundle'     => 'Laravel\\Bundle',
+		'Cache'      => 'Laravel\\Cache',
+		'Config'     => 'Laravel\\Config',
+		'Controller' => 'Laravel\\Routing\\Controller',
+		'Cookie'     => 'Laravel\\Cookie',
+		'Crypter'    => 'Laravel\\Crypter',
+		'DB'         => 'Laravel\\Database',
+		'Event'      => 'Laravel\\Event',
+		'File'       => 'Laravel\\File',
+		'Filter'     => 'Laravel\\Routing\\Filter',
+		'Form'       => 'Laravel\\Form',
+		'Hash'       => 'Laravel\\Hash',
+		'HTML'       => 'Laravel\\HTML',
+		'Input'      => 'Laravel\\Input',
+		'IoC'        => 'Laravel\\IoC',
+		'Lang'       => 'Laravel\\Lang',
+		'Log'        => 'Laravel\\Log',
+		'Memcached'  => 'Laravel\\Memcached',
+		'Paginator'  => 'Laravel\\Paginator',
+		'URL'        => 'Laravel\\URL',
+		'Redirect'   => 'Laravel\\Redirect',
+		'Redis'      => 'Laravel\\Redis',
+		'Request'    => 'Laravel\\Request',
+		'Response'   => 'Laravel\\Response',
+		'Router'     => 'Laravel\\Routing\\Router',
+		'Schema'     => 'Laravel\\Database\\Schema',
+		'Section'    => 'Laravel\\Section',
+		'Session'    => 'Laravel\\Session',
+		'Str'        => 'Laravel\\Str',
+		'Task'       => 'Laravel\\CLI\\Tasks\\Task',
+		'URI'        => 'Laravel\\URI',
+		'Validator'  => 'Laravel\\Validator',
+		'View'       => 'Laravel\\View',
+	),
+
+);

+ 68 - 0
tests/laravel/config/auth.php

@@ -0,0 +1,68 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Retrieve The Current User
+	|--------------------------------------------------------------------------
+	|
+	| This closure is called by the Auth class' "user" method when trying to
+	| retrieve a user by the ID that is stored in their session. If you find
+	| the user, just return the user object, but make sure it has an "id"
+	| property. If you can't find the user, just return null.
+	|
+	| Of course, a simple and elegant authentication solution has already
+	| been provided for you using the query builder and hashing engine.
+	| We love making your life as easy as possible.
+	|
+	*/
+
+	'user' => function($id)
+	{
+		if (filter_var($id, FILTER_VALIDATE_INT) !== false)
+		{
+			return DB::table('users')->find($id);
+		} 
+	},
+
+	/*
+	|--------------------------------------------------------------------------
+	| Authenticate User Credentials
+	|--------------------------------------------------------------------------
+	|
+	| This closure is called by the Auth::attempt() method when attempting to
+	| authenticate a user that is logging into your application. It's like a
+	| super buff bouncer to your application.
+	|
+	| If the provided credentials are correct, simply return an object that
+	| represents the user being authenticated. As long as it has a property
+	| for the "id", any object will work. If the credentials are not valid,
+	| you don't meed to return anything.
+	|
+	*/
+
+	'attempt' => function($username, $password)
+	{
+		$user = DB::table('users')->where_username($username)->first();
+
+		if ( ! is_null($user) and Hash::check($password, $user->password))
+		{
+			return $user;
+		}
+	},
+
+	/*
+	|--------------------------------------------------------------------------
+	| Logout The Current User
+	|--------------------------------------------------------------------------
+	|
+	| Here you may do anything that needs to be done when a user logs out of
+	| your application, such as call the logout method on a third-party API
+	| you are using for authentication or anything else you desire.
+	|
+	*/
+
+	'logout' => function($user) {}
+
+);

+ 71 - 0
tests/laravel/config/cache.php

@@ -0,0 +1,71 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Cache Driver
+	|--------------------------------------------------------------------------
+	|
+	| The name of the default cache driver for your application. Caching can
+	| be used to increase the performance of your application by storing any
+	| commonly accessed data in memory, a file, or some other storage.
+	|
+	| A variety of awesome drivers are available for you to use with Laravel.
+	| Some, like APC, are extremely fast. However, if that isn't an option
+	| in your environment, try file or database caching.
+	|
+	| Drivers: 'file', 'memcached', 'apc', 'redis', 'database'.
+	|
+	*/
+
+	'driver' => 'file',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Cache Key
+	|--------------------------------------------------------------------------
+	|
+	| This key will be prepended to item keys stored using Memcached and APC
+	| to prevent collisions with other applications on the server. Since the
+	| memory based stores could be shared by other applications, we need to
+	| be polite and use a prefix to uniquely identifier our items.
+	|
+	*/
+
+	'key' => 'laravel',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Cache Database
+	|--------------------------------------------------------------------------
+	|
+	| When using the database cache driver, this database table will be used
+	| to store the cached item. You may also add a "connection" option to
+	| the array to specify which database connection should be used.
+	|
+	*/
+
+	'database' => array('table' => 'laravel_cache'),
+
+	/*
+	|--------------------------------------------------------------------------
+	| Memcached Servers
+	|--------------------------------------------------------------------------
+	|
+	| The Memcached servers used by your application. Memcached is a free and
+	| open source, high-performance, distributed memory caching system. It is
+	| generic in nature but intended for use in speeding up web applications
+	| by alleviating database load.
+	|
+	| For more information, check out: http://memcached.org
+	|
+	*/
+
+	'memcached' => array(
+
+		array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100),
+
+	),	
+
+);

+ 90 - 0
tests/laravel/config/database.php

@@ -0,0 +1,90 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Default Database Connection
+	|--------------------------------------------------------------------------
+	|
+	| The name of your default database connection. This connection will used
+	| as the default for all database operations unless a different name is
+	| given when performing said operation. This connection name should be
+	| listed in the array of connections below.
+	|
+	*/
+
+	'default' => 'mysql',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Database Connections
+	|--------------------------------------------------------------------------
+	|
+	| All of the database connections used by your application. Many of your
+	| applications will no doubt only use one connection; however, you have
+	| the freedom to specify as many connections as you can handle.
+	|
+	| All database work in Laravel is done through the PHP's PDO facilities,
+	| so make sure you have the PDO drivers for your particlar database of
+	| choice installed on your machine.
+	|
+	| Drivers: 'mysql', 'pgsql', 'sqlsrv', 'sqlite'.
+	|
+	*/
+
+	'connections' => array(
+
+		'sqlite' => array(
+			'driver'   => 'sqlite',
+			'database' => 'application',
+		),
+
+		'mysql' => array(
+			'driver'   => 'mysql',
+			'host'     => 'localhost',
+			'database' => 'database',
+			'username' => 'root',
+			'password' => 'password',
+			'charset'  => 'utf8',
+		),
+
+		'pgsql' => array(
+			'driver'   => 'pgsql',
+			'host'     => 'localhost',
+			'database' => 'database',
+			'username' => 'root',
+			'password' => 'password',
+			'charset'  => 'utf8',
+		),
+
+		'sqlsrv' => array(
+			'driver'   => 'sqlsrv',
+			'host'     => 'localhost',
+			'database' => 'database',
+			'username' => 'root',
+			'password' => 'password',
+		),
+
+	),
+
+	/*
+	|--------------------------------------------------------------------------
+	| Redis Databases
+	|--------------------------------------------------------------------------
+	|
+	| Redis is an open source, fast, and advanced key-value store. However, it
+	| provides a richer set of commands than a typical key-value store such as
+	| APC or memcached. All the cool kids are using it.
+	|
+	| To get the scoop on Redis, check out: http://redis.io
+	|
+	*/
+
+	'redis' => array(
+
+		'default' => array('host' => '127.0.0.1', 'port' => 6379),
+
+	),
+
+);

+ 69 - 0
tests/laravel/config/error.php

@@ -0,0 +1,69 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Ignored Error Levels
+	|--------------------------------------------------------------------------
+	|
+	| Here you simply specify the error levels that should be ignored by the
+	| Laravel error handler. These levels will still be logged; however, no
+	| information about about them will be displayed.
+	|
+	*/
+
+	'ignore' => array(E_NOTICE, E_USER_NOTICE, E_DEPRECATED, E_USER_DEPRECATED),
+
+	/*
+	|--------------------------------------------------------------------------
+	| Error Detail
+	|--------------------------------------------------------------------------
+	|
+	| Detailed error messages contain information about the file in which an
+	| error occurs, as well as a PHP stack trace containing the call stack.
+	| You'll want them when you're trying to debug your application.
+	|
+	| If your application is in production, you'll want to turn off the error
+	| details for enhanced security and user experience since the exception
+	| stack trace could contain sensitive information.
+	|
+	*/
+
+	'detail' => true,
+
+	/*
+	|--------------------------------------------------------------------------
+	| Error Logging
+	|--------------------------------------------------------------------------
+	|
+	| When error logging is enabled, the "logger" Closure defined below will
+	| be called for every error in your application. You are free to log the
+	| errors however you want. Enjoy the flexibility.
+	|
+	*/
+
+	'log' => false,
+
+	/*
+	|--------------------------------------------------------------------------
+	| Error Logger
+	|--------------------------------------------------------------------------
+	|
+	| Because of the various ways of managing error logging, you get complete
+	| flexibility to manage error logging as you see fit. This function will
+	| be called anytime an error occurs within your application and error
+	| logging is enabled. 
+	|
+	| You may log the error message however you like; however, a simple log
+	| solution has been setup for you which will log all error messages to
+	| text files within the application storage directory.
+	|
+	*/
+
+	'logger' => function($exception)
+	{
+		Log::exception($exception);
+	},
+
+);

+ 97 - 0
tests/laravel/config/mimes.php

@@ -0,0 +1,97 @@
+<?php
+
+return array(
+
+	'hqx'   => 'application/mac-binhex40',
+	'cpt'   => 'application/mac-compactpro',
+	'csv'   => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream'),
+	'bin'   => 'application/macbinary',
+	'dms'   => 'application/octet-stream',
+	'lha'   => 'application/octet-stream',
+	'lzh'   => 'application/octet-stream',
+	'exe'   => array('application/octet-stream', 'application/x-msdownload'),
+	'class' => 'application/octet-stream',
+	'psd'   => 'application/x-photoshop',
+	'so'    => 'application/octet-stream',
+	'sea'   => 'application/octet-stream',
+	'dll'   => 'application/octet-stream',
+	'oda'   => 'application/oda',
+	'pdf'   => array('application/pdf', 'application/x-download'),
+	'ai'    => 'application/postscript',
+	'eps'   => 'application/postscript',
+	'ps'    => 'application/postscript',
+	'smi'   => 'application/smil',
+	'smil'  => 'application/smil',
+	'mif'   => 'application/vnd.mif',
+	'xls'   => array('application/excel', 'application/vnd.ms-excel', 'application/msexcel'),
+	'ppt'   => array('application/powerpoint', 'application/vnd.ms-powerpoint'),
+	'wbxml' => 'application/wbxml',
+	'wmlc'  => 'application/wmlc',
+	'dcr'   => 'application/x-director',
+	'dir'   => 'application/x-director',
+	'dxr'   => 'application/x-director',
+	'dvi'   => 'application/x-dvi',
+	'gtar'  => 'application/x-gtar',
+	'gz'    => 'application/x-gzip',
+	'php'   => array('application/x-httpd-php', 'text/x-php'),
+	'php4'  => 'application/x-httpd-php',
+	'php3'  => 'application/x-httpd-php',
+	'phtml' => 'application/x-httpd-php',
+	'phps'  => 'application/x-httpd-php-source',
+	'js'    => 'application/x-javascript',
+	'swf'   => 'application/x-shockwave-flash',
+	'sit'   => 'application/x-stuffit',
+	'tar'   => 'application/x-tar',
+	'tgz'   => array('application/x-tar', 'application/x-gzip-compressed'),
+	'xhtml' => 'application/xhtml+xml',
+	'xht'   => 'application/xhtml+xml',
+	'zip'   => array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),
+	'mid'   => 'audio/midi',
+	'midi'  => 'audio/midi',
+	'mpga'  => 'audio/mpeg',
+	'mp2'   => 'audio/mpeg',
+	'mp3'   => array('audio/mpeg', 'audio/mpg', 'audio/mpeg3', 'audio/mp3'),
+	'aif'   => 'audio/x-aiff',
+	'aiff'  => 'audio/x-aiff',
+	'aifc'  => 'audio/x-aiff',
+	'ram'   => 'audio/x-pn-realaudio',
+	'rm'    => 'audio/x-pn-realaudio',
+	'rpm'   => 'audio/x-pn-realaudio-plugin',
+	'ra'    => 'audio/x-realaudio',
+	'rv'    => 'video/vnd.rn-realvideo',
+	'wav'   => 'audio/x-wav',
+	'bmp'   => 'image/bmp',
+	'gif'   => 'image/gif',
+	'jpeg'  => array('image/jpeg', 'image/pjpeg'),
+	'jpg'   => array('image/jpeg', 'image/pjpeg'),
+	'jpe'   => array('image/jpeg', 'image/pjpeg'),
+	'png'   => 'image/png',
+	'tiff'  => 'image/tiff',
+	'tif'   => 'image/tiff',
+	'css'   => 'text/css',
+	'html'  => 'text/html',
+	'htm'   => 'text/html',
+	'shtml' => 'text/html',
+	'txt'   => 'text/plain',
+	'text'  => 'text/plain',
+	'log'   => array('text/plain', 'text/x-log'),
+	'rtx'   => 'text/richtext',
+	'rtf'   => 'text/rtf',
+	'xml'   => 'text/xml',
+	'xsl'   => 'text/xml',
+	'mpeg'  => 'video/mpeg',
+	'mpg'   => 'video/mpeg',
+	'mpe'   => 'video/mpeg',
+	'qt'    => 'video/quicktime',
+	'mov'   => 'video/quicktime',
+	'avi'   => 'video/x-msvideo',
+	'movie' => 'video/x-sgi-movie',
+	'doc'   => 'application/msword',
+	'docx'  => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+	'xlsx'  => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+	'word'  => array('application/msword', 'application/octet-stream'),
+	'xl'    => 'application/excel',
+	'eml'   => 'message/rfc822',
+	'json'  => array('application/json', 'text/json'),
+
+);

+ 117 - 0
tests/laravel/config/session.php

@@ -0,0 +1,117 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Session Driver
+	|--------------------------------------------------------------------------
+	|
+	| The name of the session driver used by your application. Since HTTP is
+	| stateless, sessions are used to simulate "state" across requests made
+	| by the same user of your application. In other words, it's how an
+	| application knows who the heck you are.
+	|
+	| Drivers: 'cookie', 'file', 'database', 'memcached', 'apc', 'redis'.
+	|
+	*/
+
+	'driver' => '',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Session Database
+	|--------------------------------------------------------------------------
+	|
+	| The database table on which the session should be stored. It probably
+	| goes without saying that this option only matters if you are using
+	| the super slick database session driver.
+	|
+	*/
+
+	'table' => 'sessions',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Session Garbage Collection Probability
+	|--------------------------------------------------------------------------
+	|
+	| Some session drivers require the manual clean-up of expired sessions.
+	| This option specifies the probability of session garbage collection
+	| occuring for any given request. 
+	|
+	| For example, the default value states that garbage collection has a
+	| 2% chance of occuring for any given request to the application.
+	| Feel free to tune this to your application's size and speed.
+	|
+	*/
+
+	'sweepage' => array(2, 100),
+
+	/*
+	|--------------------------------------------------------------------------
+	| Session Lifetime
+	|--------------------------------------------------------------------------
+	|
+	| The number of minutes a session can be idle before expiring.
+	|
+	*/
+
+	'lifetime' => 60,
+
+	/*
+	|--------------------------------------------------------------------------
+	| Session Expiration On Close
+	|--------------------------------------------------------------------------
+	|
+	| Determines if the session should expire when the user's web browser closes.
+	|
+	*/
+
+	'expire_on_close' => false,
+
+	/*
+	|--------------------------------------------------------------------------
+	| Session Cookie Name
+	|--------------------------------------------------------------------------
+	|
+	| The name that should be given to the session cookie.
+	|
+	*/
+
+	'cookie' => 'laravel_session',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Session Cookie Path
+	|--------------------------------------------------------------------------
+	|
+	| The path for which the session cookie is available.
+	|
+	*/
+
+	'path' => '/',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Session Cookie Domain
+	|--------------------------------------------------------------------------
+	|
+	| The domain for which the session cookie is available.
+	|
+	*/
+
+	'domain' => null,
+
+	/*
+	|--------------------------------------------------------------------------
+	| HTTPS Only Session Cookie
+	|--------------------------------------------------------------------------
+	|
+	| Determines if the cookie should only be sent over HTTPS.
+	|
+	*/
+
+	'secure' => false,
+
+);

+ 119 - 0
tests/laravel/config/strings.php

@@ -0,0 +1,119 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| String Inflection
+	|--------------------------------------------------------------------------
+	|
+	| This array contains the singular and plural forms of words. It's used by
+	| the "singular" and "plural" methods on the Str class to convert a given
+	| word from singular to plural and vice versa.
+	|
+	| This simple array is in constrast to the complicated regular expression
+	| patterns used by other frameworks. We think you'll enjoy the speed and
+	| simplicity of this solution.
+	|
+	| When adding a word to the array, the key should be the singular form,
+	| while the array value should be the plural form. We've included an
+	| example to get you started!
+	|
+	*/
+
+	'inflection' => array(
+
+		'user'    => 'users',
+		'person'  => 'people',
+		'comment' => 'comments',
+
+	),
+
+	/*
+	|--------------------------------------------------------------------------
+	| ASCII Characters
+	|--------------------------------------------------------------------------
+	|
+	| This array contains foreign characters and their 7-bit ASCII equivalents.
+	| The array is used by the "ascii" method on the Str class to get strings
+	| ready for inclusion in a URL slug.
+	|
+	| Of course, the "ascii" method may also be used by you for whatever your
+	| application requires. Feel free to add any characters we missed, and be
+	| sure to let us know about them!
+	|
+	*/
+
+	'ascii' => array(
+
+		'/รฆ|วฝ/' => 'ae',
+		'/ล“/' => 'oe',
+		'/ร€|ร|ร‚|รƒ|ร„|ร…|วบ|ฤ€|ฤ‚|ฤ„|ว|ะ/' => 'A',
+		'/ร |รก|รข|รฃ|รค|รฅ|วป|ฤ|ฤƒ|ฤ…|วŽ|ยช|ะฐ/' => 'a',
+		'/ะ‘/' => 'B',
+		'/ะฑ/' => 'b',
+		'/ร‡|ฤ†|ฤˆ|ฤŠ|ฤŒ|ะฆ/' => 'C',
+		'/รง|ฤ‡|ฤ‰|ฤ‹|ฤ|ั†/' => 'c',
+		'/ร|ฤŽ|ฤ|ะ”/' => 'Dj',
+		'/รฐ|ฤ|ฤ‘|ะด/' => 'dj',
+		'/รˆ|ร‰|รŠ|ร‹|ฤ’|ฤ”|ฤ–|ฤ˜|ฤš|ะ•|ะ|ะญ/' => 'E',
+		'/รจ|รฉ|รช|รซ|ฤ“|ฤ•|ฤ—|ฤ™|ฤ›|ะต|ั‘|ั/' => 'e',
+		'/ะค/' => 'F',
+		'/ฦ’|ั„/' => 'f',
+		'/ฤœ|ฤž|ฤ |ฤข|ะ“/' => 'G',
+		'/ฤ|ฤŸ|ฤก|ฤฃ|ะณ/' => 'g',
+		'/ฤค|ฤฆ|ะฅ/' => 'H',
+		'/ฤฅ|ฤง|ั…/' => 'h',
+		'/รŒ|ร|รŽ|ร|ฤจ|ฤช|ฤฌ|ว|ฤฎ|ฤฐ|ะ˜/' => 'I',
+		'/รฌ|รญ|รฎ|รฏ|ฤฉ|ฤซ|ฤญ|ว|ฤฏ|ฤฑ|ะธ/' => 'i',
+		'/ฤด|ะ™/' => 'J',
+		'/ฤต|ะน/' => 'j',
+		'/ฤถ|ะš/' => 'K',
+		'/ฤท|ะบ/' => 'k',
+		'/ฤน|ฤป|ฤฝ|ฤฟ|ล|ะ›/' => 'L',
+		'/ฤบ|ฤผ|ฤพ|ล€|ล‚|ะป/' => 'l',
+		'/ะœ/' => 'M',
+		'/ะผ/' => 'm',
+		'/ร‘|ลƒ|ล…|ล‡|ะ/' => 'N',
+		'/รฑ|ล„|ล†|ลˆ|ล‰|ะฝ/' => 'n',
+		'/ร–|ร’|ร“|ร”|ร•|ลŒ|ลŽ|ว‘|ล|ฦ |ร˜|วพ|ะž/' => 'O',
+		'/รถ|รฒ|รณ|รด|รต|ล|ล|ว’|ล‘|ฦก|รธ|วฟ|ยบ|ะพ/' => 'o',
+		'/ะŸ/' => 'P',
+		'/ะฟ/' => 'p',
+		'/ล”|ล–|ล˜|ะ /' => 'R',
+		'/ล•|ล—|ล™|ั€/' => 'r',
+		'/ลš|ลœ|ลž|ล |ะก/' => 'S',
+		'/ล›|ล|ลŸ|ลก|ลฟ|ั/' => 's',
+		'/ลข|ลค|ลฆ|ะข/' => 'T',
+		'/ลฃ|ลฅ|ลง|ั‚/' => 't',
+		'/ร™|รš|ร›|ลจ|ลช|ลฌ|ลฎ|ลฐ|ลฒ|ฦฏ|ว“|ว•|ว—|ว™|ว›|ะฃ/' => 'U',
+		'/รน|รบ|รป|ลฉ|ลซ|ลญ|ลฏ|ลฑ|ลณ|ฦฐ|ว”|ว–|ว˜|วš|วœ|ัƒ/' => 'u',
+		'/ะ’/' => 'V',
+		'/ะฒ/' => 'v',
+		'/ร|ลธ|ลถ|ะซ/' => 'Y',
+		'/รฝ|รฟ|ลท|ั‹/' => 'y',
+		'/ลด/' => 'W',
+		'/ลต/' => 'w',
+		'/ลน|ลป|ลฝ|ะ—/' => 'Z',
+		'/ลบ|ลผ|ลพ|ะท/' => 'z',
+		'/ร†|วผ/' => 'AE',
+		'/รŸ/'=> 'ss',
+		'/ฤฒ/' => 'IJ',
+		'/ฤณ/' => 'ij',
+		'/ล’/' => 'OE',
+		'/ะง/' => 'Ch',
+		'/ั‡/' => 'ch',
+		'/ะฎ/' => 'Ju',
+		'/ัŽ/' => 'ju',
+		'/ะฏ/' => 'Ja',
+		'/ั/' => 'ja',
+		'/ะจ/' => 'Sh',
+		'/ัˆ/' => 'sh',
+		'/ะฉ/' => 'Shch',
+		'/ั‰/' => 'shch',
+		'/ะ–/' => 'Zh',
+		'/ะถ/' => 'zh',
+
+	),
+
+);

+ 42 - 0
tests/laravel/controllers/home.php

@@ -0,0 +1,42 @@
+<?php
+
+class Home_Controller extends Controller {
+
+	/*
+	|--------------------------------------------------------------------------
+	| The Default Controller
+	|--------------------------------------------------------------------------
+	|
+	| Instead of using RESTful routes and anonymous functions, you might wish
+	| to use controllers to organize your application API. You'll love them.
+	|
+	| To start using this controller simply remove the default route from the
+	| application "routes.php" file. Laravel is smart enough to locate this
+	| controller and call the default method, which is "action_index".
+	|
+	| This controller responds to URIs beginning with "home", and it also
+	| serves as the default controller for the application, meaning it
+	| handles requests to the root of the application.
+	|
+	| You can respond to GET requests to "/home/profile" like so:
+	|
+	|		public function action_profile()
+	|		{
+	|			return "This is your profile!";
+	|		}
+	|
+	| Any extra segments are passed to the method as parameters:
+	|
+	|		public function action_profile($id)
+	|		{
+	|			return "This is the profile for user {$id}.";
+	|		}
+	|
+	*/
+
+	public function action_index()
+	{
+		return View::make('home.index');
+	}
+
+}

+ 19 - 0
tests/laravel/language/en/pagination.php

@@ -0,0 +1,19 @@
+<?php 
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Pagination Language Lines
+	|--------------------------------------------------------------------------
+	|
+	| The following language lines are used by the paginator library to build
+	| the pagination links. You're free to change them to anything you want.
+	| If you come up with something more exciting, let us know.
+	|
+	*/
+
+	'previous' => '&laquo; Previous',
+	'next'     => 'Next &raquo;',
+
+);

+ 75 - 0
tests/laravel/language/en/validation.php

@@ -0,0 +1,75 @@
+<?php 
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Validation Attribute Language Lines
+	|--------------------------------------------------------------------------
+	|
+	| The following language lines are used to swap attribute place-holders
+	| with something more reader friendly such as "E-Mail Address" instead
+	| of "email". Your users will thank you.
+	|
+	| The Validator class will automatically search this array of lines it
+	| is attempting to replace the :attribute place-holder in messages.
+	| It's pretty slick. We think you'll like it.
+	|
+	*/
+
+	'attributes' => array(),
+
+	/*
+	|--------------------------------------------------------------------------
+	| Validation Language Lines
+	|--------------------------------------------------------------------------
+	|
+	| The following language lines contain the default error messages used
+	| by the validator class. Some of the rules contain multiple versions,
+	| such as the size (max, min, between) rules. These versions are used
+	| for different input types such as strings and files.
+	|
+	| These language lines may be easily changed to provide custom error
+	| messages in your application. Error messages for custom validation
+	| rules may also be added to this file.
+	|
+	*/
+
+	"accepted"       => "The :attribute must be accepted.",
+	"active_url"     => "The :attribute is not a valid URL.",
+	"alpha"          => "The :attribute may only contain letters.",
+	"alpha_dash"     => "The :attribute may only contain letters, numbers, and dashes.",
+	"alpha_num"      => "The :attribute may only contain letters and numbers.",
+	"between"        => array(
+		"numeric" => "The :attribute must be between :min - :max.",
+		"file"    => "The :attribute must be between :min - :max kilobytes.",
+		"string"  => "The :attribute must be between :min - :max characters.",
+	),
+	"confirmed"      => "The :attribute confirmation does not match.",
+	"email"          => "The :attribute format is invalid.",
+	"image"          => "The :attribute must be an image.",
+	"in"             => "The selected :attribute is invalid.",
+	"integer"        => "The :attribute must be an integer.",
+	"max"            => array(
+		"numeric" => "The :attribute must be less than :max.",
+		"file"    => "The :attribute must be less than :max kilobytes.",
+		"string"  => "The :attribute must be less than :max characters.",
+	),
+	"mimes"          => "The :attribute must be a file of type: :values.",
+	"min"            => array(
+		"numeric" => "The :attribute must be at least :min.",
+		"file"    => "The :attribute must be at least :min kilobytes.",
+		"string"  => "The :attribute must be at least :min characters.",
+	),
+	"not_in"         => "The selected :attribute is invalid.",
+	"numeric"        => "The :attribute must be a number.",
+	"required"       => "The :attribute field is required.",
+	"size"           => array(
+		"numeric" => "The :attribute must be :size.",
+		"file"    => "The :attribute must be :size kilobyte.",
+		"string"  => "The :attribute must be :size characters.",
+	),
+	"unique"         => "The :attribute has already been taken.",
+	"url"            => "The :attribute format is invalid.",
+
+);

+ 0 - 0
tests/laravel/libraries/.gitignore


+ 0 - 0
tests/laravel/migrations/.gitignore


+ 0 - 0
tests/laravel/models/.gitignore


+ 87 - 0
tests/laravel/routes.php

@@ -0,0 +1,87 @@
+<?php
+
+/*
+|--------------------------------------------------------------------------
+| Application Routes
+|--------------------------------------------------------------------------
+|
+| Simply tell Laravel the HTTP verbs and URIs it should respond to. It is a
+| breeze to setup your applications using Laravel's RESTful routing, and it
+| is perfectly suited for building both large applications and simple APIs.
+| Enjoy the fresh air and simplicity of the framework.
+|
+| Let's respond to a simple GET request to http://example.com/hello:
+|
+|		Router::register('GET /hello', function()
+|		{
+|			return 'Hello World!';
+|		});
+|
+| You can even respond to more than one URI:
+|
+|		Router::register('GET /hello, GET /world', function()
+|		{
+|			return 'Hello World!';
+|		});
+|
+| It's easy to allow URI wildcards using (:num) or (:any):
+|
+|		Router::register('GET /hello/(:any)', function($name)
+|		{
+|			return "Welcome, $name.";
+|		});
+|
+*/
+
+Router::register(array('GET /', 'GET /home'), function()
+{
+	return View::make('home.index');
+});
+
+/*
+|--------------------------------------------------------------------------
+| Route Filters
+|--------------------------------------------------------------------------
+|
+| Filters provide a convenient method for attaching functionality to your
+| routes. The built-in "before" and "after" filters are called before and
+| after every request to your application, and you may even create other
+| filters that can be attached to individual routes.
+|
+| Let's walk through an example...
+|
+| First, define a filter:
+|
+|		Filter::register('filter', function()
+|		{
+|			return 'Filtered!';
+|		});
+|
+| Next, attach the filter to a route:
+|
+|		Router::register('GET /', array('before' => 'filter', function()
+|		{
+|			return 'Hello World!';
+|		}));
+|
+*/
+
+Filter::register('before', function()
+{
+	// Do stuff before every request to your application...
+});
+
+Filter::register('after', function()
+{
+	// Do stuff after every request to your application...
+});
+
+Filter::register('csrf', function()
+{
+	if (Request::forged()) return Response::error('500');
+});
+
+Filter::register('auth', function()
+{
+	if (Auth::guest()) return Redirect::to('login');
+});

+ 0 - 0
tests/laravel/tasks/.gitignore


+ 103 - 0
tests/laravel/views/error/404.php

@@ -0,0 +1,103 @@
+<!doctype html>
+<html>
+	<head>
+		<meta charset="utf-8">
+
+		<title>Error 404 - Not Found</title>
+
+		<style>
+			@import url(http://fonts.googleapis.com/css?family=Ubuntu);
+
+			body {
+				background: #eee;
+				color: #6d6d6d;
+				font: normal normal normal 14px/1.253 Ubuntu, sans-serif;
+				margin: 0 0 25px 0;
+				min-width: 800px;
+				padding: 0;
+			}
+
+			#main {
+				background-clip: padding-box;
+				background-color: #fff;
+				border:1px solid #ccc;
+				border-radius: 5px;
+				box-shadow: 0 0 10px #cdcdcd;
+				margin: 25px auto 0;
+				padding: 30px;
+				width: 700px;
+				position: relative;
+			}
+
+			#main h1 {
+				font-family: 'Ubuntu';
+				font-size: 38px;
+				letter-spacing: 2px;
+				margin: 0 0 10px 0;
+				padding: 0;
+			}
+
+			#main h2 {
+				color: #999;
+				font-size: 18px;
+				letter-spacing: 3px;
+				margin: 0 0 25px 0;
+				padding: 0 0 0 0;
+			}
+
+			#main h3 {
+				color: #999;
+				margin-top: 24px;
+				padding: 0 0 0 0;
+			}
+
+			#main h3 {
+				font-size: 18px;
+			}
+
+			#main p {
+				line-height: 25px;
+				margin: 10px 0;
+			}
+
+			#main pre {
+				background-color: #333;
+				border-left: 1px solid #d8d8d8;
+				border-top: 1px solid #d8d8d8;
+				border-radius: 5px;
+				color: #eee;
+				padding: 10px;
+			}
+
+			#main ul {
+				margin: 10px 0;
+				padding: 0 30px;
+			}
+
+			#main li {
+				margin: 5px 0;
+			}
+		</style>
+	</head>
+	<body>
+		<div id="main">
+			<?php $messages = array('We need a map.', 'I think we\'re lost.', 'We took a wrong turn.'); ?>
+
+			<h1><?php echo $messages[mt_rand(0, 2)]; ?></h1>
+
+			<h2>Server Error: 404 (Not Found)</h2>
+
+			<h3>What does this mean?</h3>
+
+			<p>
+				We couldn't find the page you requested on our servers. We're really sorry
+				about that. It's our fault, not yours. We'll work hard to get this page
+				back online as soon as possible.
+			</p>
+
+			<p>
+				Perhaps you would like to go to our <?php echo HTML::link('/', 'home page'); ?>?
+			</p>
+		</div>
+	</body>
+</html>

+ 103 - 0
tests/laravel/views/error/500.php

@@ -0,0 +1,103 @@
+<!doctype html>
+<html>
+	<head>
+		<meta charset="utf-8">
+
+		<title>Error 500 - Internal Server Error</title>
+
+		<style>
+			@import url(http://fonts.googleapis.com/css?family=Ubuntu);
+
+			body {
+				background: #eee;
+				color: #6d6d6d;
+				font: normal normal normal 14px/1.253 Ubuntu, sans-serif;
+				margin: 0 0 25px 0;
+				min-width: 800px;
+				padding: 0;
+			}
+
+			#main {
+				background-clip: padding-box;
+				background-color: #fff;
+				border:1px solid #ccc;
+				border-radius: 5px;
+				box-shadow: 0 0 10px #cdcdcd;
+				margin: 25px auto 0;
+				padding: 30px;
+				width: 700px;
+				position: relative;
+			}
+
+			#main h1 {
+				font-family: 'Ubuntu';
+				font-size: 38px;
+				letter-spacing: 2px;
+				margin: 0 0 10px 0;
+				padding: 0;
+			}
+
+			#main h2 {
+				color: #999;
+				font-size: 18px;
+				letter-spacing: 3px;
+				margin: 0 0 25px 0;
+				padding: 0 0 0 0;
+			}
+
+			#main h3 {
+				color: #999;
+				margin-top: 24px;
+				padding: 0 0 0 0;
+			}
+
+			#main h3 {
+				font-size: 18px;
+			}
+
+			#main p {
+				line-height: 25px;
+				margin: 10px 0;
+			}
+
+			#main pre {
+				background-color: #333;
+				border-left: 1px solid #d8d8d8;
+				border-top: 1px solid #d8d8d8;
+				border-radius: 5px;
+				color: #eee;
+				padding: 10px;
+			}
+
+			#main ul {
+				margin: 10px 0;
+				padding: 0 30px;
+			}
+
+			#main li {
+				margin: 5px 0;
+			}
+		</style>
+	</head>
+	<body>
+		<div id="main">
+			<?php $messages = array('Ouch.', 'Oh no!', 'Whoops!'); ?>
+
+			<h1><?php echo $messages[mt_rand(0, 2)]; ?></h1>
+
+			<h2>Server Error: 500 (Internal Server Error)</h2>
+
+			<h3>What does this mean?</h3>
+
+			<p>
+				Something went wrong on our servers while we were processing your request.
+				We're really sorry about this, and will work hard to get this resolved as
+				soon as possible.
+			</p>
+
+			<p>
+				Perhaps you would like to go to our <?php echo HTML::link('/', 'home page'); ?>?
+			</p>
+		</div>
+	</body>
+</html>

+ 122 - 0
tests/laravel/views/home/index.php

@@ -0,0 +1,122 @@
+<!doctype html>
+<html>
+	<head>
+		<meta charset="utf-8">
+
+		<title>Laravel - A Framework For Web Artisans</title>
+
+		<style>
+			@import url(http://fonts.googleapis.com/css?family=Ubuntu);
+
+			body {
+				background: #eee;
+				color: #6d6d6d;
+				font: normal normal normal 14px/1.253 Ubuntu, sans-serif;
+				margin: 0 0 25px 0;
+				min-width: 800px;
+				padding: 0;
+			}
+
+			#main {
+				background-clip: padding-box;
+				background-color: #fff;
+				border:1px solid #ccc;
+				border-radius: 5px;
+				box-shadow: 0 0 10px #cdcdcd;
+				margin: 25px auto 0;
+				padding: 30px;
+				width: 700px;
+				position: relative;
+			}
+
+			#main h1 {
+				font-family: 'Ubuntu';
+				font-size: 38px;
+				letter-spacing: 2px;
+				margin: 0 0 10px 0;
+				padding: 0;
+			}
+
+			#main h2 {
+				color: #999;
+				font-size: 18px;
+				letter-spacing: 3px;
+				margin: 0 0 25px 0;
+				padding: 0 0 0 0;
+			}
+
+			#main h3 {
+				color: #999;
+				margin-top: 24px;
+				padding: 0 0 0 0;
+			}
+
+			#main h3 {
+				font-size: 18px;
+			}
+
+			#main p {
+				line-height: 25px;
+				margin: 10px 0;
+			}
+
+			#main pre {
+				background-color: #333;
+				border-left: 1px solid #d8d8d8;
+				border-top: 1px solid #d8d8d8;
+				border-radius: 5px;
+				color: #eee;
+				padding: 10px;
+			}
+
+			#main ul {
+				margin: 10px 0;
+				padding: 0 30px;
+			}
+
+			#main li {
+				margin: 5px 0;
+			}
+		</style>
+	</head>
+	<body>
+		<div id="main">
+			<h1>Welcome To Laravel</h1>
+
+			<h2>A Framework For Web Artisans</h2>
+
+			<p>
+				You have successfully installed the Laravel framework. Laravel is a simple framework
+				that helps web artisans create beautiful, creative applications using elegant, expressive
+				syntax. You'll love using it.
+			</p>
+
+			<h3>Learn the terrain.</h3>
+
+			<p>
+				You've landed yourself on our default home page. The route that
+				is generating this page lives at:
+			</p>
+
+			<pre><code>APP_PATH/routes.php</code></pre>
+
+			<p>And the view sitting before you can be found at:</p>
+
+			<pre><code>APP_PATH/views/home/index.php</code></pre>
+
+			<h3>Create something beautiful.</h3>
+
+			<p>
+				Now that you're up and running, it's time to start creating!
+				Here are some links to help you get started:
+			</p>
+
+			<ul>
+				<li><a href="http://laravel.com">Official Website</a></li>
+				<li><a href="http://forums.laravel.com">Laravel Forums</a></li>
+				<li><a href="http://github.com/laravel/laravel">GitHub Repository</a></li>
+			</ul>
+
+		</div>
+	</body>
+</html>