Browse Source

Fixing a double slash bug in URL generation with languages. add tests.

Taylor Otwell 11 years ago
parent
commit
4e21cfce39
3 changed files with 40 additions and 2 deletions
  1. 24 0
      laravel/tests/cases/url.test.php
  2. 7 2
      laravel/url.php
  3. 9 0
      phpunit.xml

+ 24 - 0
laravel/tests/cases/url.test.php

@@ -84,6 +84,8 @@ class URLTest extends PHPUnit_Framework_TestCase {
 		Request::foundation()->server->add(array('HTTPS' => 'on'));
 
 		$this->assertEquals('https://localhost/image.jpg', URL::to_asset('image.jpg'));
+
+		Request::foundation()->server->add(array('HTTPS' => 'off'));
 	}
 
 	/**
@@ -103,4 +105,26 @@ class URLTest extends PHPUnit_Framework_TestCase {
 		$this->assertEquals('http://localhost/index.php/url/test/taylor/otwell', URL::to_route('url-test-2', array('taylor', 'otwell')));
 	}
 
+
+	/**
+	 * Test language based URL generation.
+	 *
+	 * @group laravel
+	 */
+	public function testUrlsGeneratedWithLanguages()
+	{
+		Config::set('application.languages', array('sp', 'fr'));
+		Config::set('application.language', 'sp');
+		$this->assertEquals('http://localhost/index.php/sp/foo', URL::to('foo'));
+		$this->assertEquals('http://localhost/foo.jpg', URL::to_asset('foo.jpg'));
+
+		Config::set('application.index', '');
+		$this->assertEquals('http://localhost/sp/foo', URL::to('foo'));
+
+		Config::set('application.index', 'index.php');
+		Config::set('application.language', 'en');
+		$this->assertEquals('http://localhost/index.php/foo', URL::to('foo'));
+		Config::set('application.languages', array());
+	}
+
 }

+ 7 - 2
laravel/url.php

@@ -114,9 +114,14 @@ class URL {
 			$root .= '/'.Config::get('application.index');
 		}
 
-		if ( ! $asset and $locale and count(Config::get('application.languages')) > 0)
+		$languages = Config::get('application.languages');
+
+		if ( ! $asset and $locale and count($languages) > 0)
 		{
-			$root .= '/'.Config::get('application.language');
+			if (in_array($default = Config::get('application.language'), $languages))
+			{
+				$root = rtrim($root, '/').'/'.$default;
+			}
 		}
 
 		// Since SSL is not often used while developing the application, we allow the

+ 9 - 0
phpunit.xml

@@ -0,0 +1,9 @@
+<phpunit colors="true"
+         bootstrap="/Users/taylor/Code/Laravel/framework/laravel/tests/phpunit.php"
+         backupGlobals="false">
+	<testsuites>
+		<testsuite name="Test Suite">
+			<directory suffix=".test.php">/Users/taylor/Code/Laravel/framework/laravel/tests/cases</directory>
+		</testsuite>
+	</testsuites>
+</phpunit>