2008-07-18 01:32:31 +02:00
< ? php
/**
* @ package sapphire
* @ subpackage tests
*
* @ todo Test that order of combine_files () is correct
2008-07-18 05:47:17 +02:00
* @ todo Figure out how to clear the modified state of Requirements class - might affect other tests .
2008-07-18 01:32:31 +02:00
*/
class RequirementsTest extends SapphireTest {
static $html_template = '<html><head></head><body></body></html>' ;
2008-08-11 09:22:50 +02:00
function testExternalUrls () {
Requirements :: javascript ( 'http://www.mydomain.com/test.js' );
Requirements :: javascript ( 'https://www.mysecuredomain.com/test.js' );
Requirements :: css ( 'http://www.mydomain.com/test.css' );
Requirements :: css ( 'https://www.mysecuredomain.com/test.css' );
$html = Requirements :: includeInHTML ( false , self :: $html_template );
$this -> assertTrue (
( strpos ( $html , 'http://www.mydomain.com/test.js' ) !== false ),
'Load external javascript URL'
);
$this -> assertTrue (
( strpos ( $html , 'https://www.mysecuredomain.com/test.js' ) !== false ),
'Load external secure javascript URL'
);
$this -> assertTrue (
( strpos ( $html , 'http://www.mydomain.com/test.css' ) !== false ),
'Load external CSS URL'
);
$this -> assertTrue (
( strpos ( $html , 'https://www.mysecuredomain.com/test.css' ) !== false ),
'Load external secure CSS URL'
);
}
2008-07-18 01:32:31 +02:00
function testCombinedJavascript () {
2008-07-18 05:47:17 +02:00
$this -> setupCombinedRequirements ();
2008-07-18 01:32:31 +02:00
2008-11-01 15:04:31 +01:00
$combinedFilePath = Director :: baseFolder () . '/' . 'RequirementsTest_bc.js' ;
2008-07-18 01:32:31 +02:00
$html = Requirements :: includeInHTML ( false , self :: $html_template );
2008-08-11 08:28:29 +02:00
2008-07-18 01:32:31 +02:00
/* COMBINED JAVASCRIPT FILE IS INCLUDED IN HTML HEADER */
2008-11-01 15:04:31 +01:00
$this -> assertTrue (( bool ) preg_match ( '/src=".*\/RequirementsTest_bc\.js/' , $html ), 'combined javascript file is included in html header' );
2008-07-18 01:32:31 +02:00
/* COMBINED JAVASCRIPT FILE EXISTS */
2008-07-18 05:47:17 +02:00
$this -> assertTrue ( file_exists ( $combinedFilePath ), 'combined javascript file exists' );
2008-07-18 01:32:31 +02:00
/* COMBINED JAVASCRIPT HAS CORRECT CONTENT */
2008-07-18 05:47:17 +02:00
$this -> assertTrue (( strpos ( file_get_contents ( $combinedFilePath ), " alert('b') " ) !== false ), 'combined javascript has correct content' );
$this -> assertTrue (( strpos ( file_get_contents ( $combinedFilePath ), " alert('c') " ) !== false ), 'combined javascript has correct content' );
2008-07-18 01:32:31 +02:00
/* COMBINED FILES ARE NOT INCLUDED TWICE */
2008-11-01 15:04:31 +01:00
$this -> assertFalse (( bool ) preg_match ( '/src=".*\/RequirementsTest_b\.js/' , $html ), 'combined files are not included twice' );
$this -> assertFalse (( bool ) preg_match ( '/src=".*\/RequirementsTest_c\.js/' , $html ), 'combined files are not included twice' );
2008-07-18 01:32:31 +02:00
/* NORMAL REQUIREMENTS ARE STILL INCLUDED */
2008-11-01 15:04:31 +01:00
$this -> assertTrue (( bool ) preg_match ( '/src=".*\/RequirementsTest_a\.js/' , $html ), 'normal requirements are still included' );
2008-07-18 05:47:17 +02:00
2008-11-01 15:04:31 +01:00
Requirements :: delete_combined_files ( 'RequirementsTest_bc.js' );
2008-07-18 05:47:17 +02:00
}
function testBlockedCombinedJavascript () {
2008-11-01 15:04:31 +01:00
$combinedFilePath = Director :: baseFolder () . '/' . 'RequirementsTest_bc.js' ;
2008-08-11 09:22:50 +02:00
2008-07-18 05:47:17 +02:00
/* BLOCKED COMBINED FILES ARE NOT INCLUDED */
$this -> setupCombinedRequirements ();
2008-11-01 15:04:31 +01:00
Requirements :: block ( 'RequirementsTest_bc.js' );
Requirements :: delete_combined_files ( 'RequirementsTest_bc.js' );
2008-08-11 09:22:50 +02:00
2008-07-18 05:47:17 +02:00
clearstatcache (); // needed to get accurate file_exists() results
$html = Requirements :: includeInHTML ( false , self :: $html_template );
2008-08-11 09:22:50 +02:00
2008-11-01 15:04:31 +01:00
$this -> assertFalse (( bool ) preg_match ( '/src=".*\/RequirementsTest_bc\.js/' , $html ), 'blocked combined files are not included ' );
Requirements :: unblock ( 'RequirementsTest_bc.js' );
2008-07-18 05:47:17 +02:00
/* BLOCKED UNCOMBINED FILES ARE NOT INCLUDED */
// need to re-add requirements, as Requirements::process_combined_includes() alters the
// original arrays grml...
$this -> setupCombinedRequirements ();
2008-11-01 15:04:31 +01:00
Requirements :: block ( 'sapphire/tests/forms/RequirementsTest_b.js' );
Requirements :: delete_combined_files ( 'RequirementsTest_bc.js' );
2008-07-18 05:47:17 +02:00
clearstatcache (); // needed to get accurate file_exists() results
$html = Requirements :: includeInHTML ( false , self :: $html_template );
$this -> assertFalse (( strpos ( file_get_contents ( $combinedFilePath ), " alert('b') " ) !== false ), 'blocked uncombined files are not included' );
2008-11-01 15:04:31 +01:00
Requirements :: unblock ( 'RequirementsTest_b.js' );
2008-07-18 05:47:17 +02:00
/* A SINGLE FILE CAN'T BE INCLUDED IN TWO COMBINED FILES */
$this -> setupCombinedRequirements ();
clearstatcache (); // needed to get accurate file_exists() results
2008-08-12 01:18:56 +02:00
// This throws a notice-level error, so we prefix with @
@ Requirements :: combine_files (
2008-11-01 15:04:31 +01:00
'RequirementsTest_ac.js' ,
2008-07-18 05:47:17 +02:00
array (
2008-11-01 15:04:31 +01:00
'sapphire/tests/forms/RequirementsTest_a.js' ,
'sapphire/tests/forms/RequirementsTest_c.js'
2008-07-18 05:47:17 +02:00
)
);
2008-08-12 01:18:56 +02:00
2008-07-18 05:47:17 +02:00
$combinedFiles = Requirements :: get_combine_files ();
$this -> assertEquals (
array_keys ( $combinedFiles ),
2008-11-01 15:04:31 +01:00
array ( 'RequirementsTest_bc.js' ),
2008-08-11 09:22:50 +02:00
" A single file can't be included in two combined files "
2008-07-18 05:47:17 +02:00
);
2008-07-18 01:32:31 +02:00
2008-11-01 15:04:31 +01:00
Requirements :: delete_combined_files ( 'RequirementsTest_bc.js' );
2008-07-18 05:47:17 +02:00
}
/**
* This is a bit of a hack , as it alters the Requirements
* statics globally for all tests .
*
* @ todo Refactor Requirements to work on test instance level
*/
protected function setupCombinedRequirements () {
Requirements :: clear ();
// clearing all previously generated requirements (just in case)
2008-08-12 01:18:56 +02:00
Requirements :: clear_combined_files ();
2008-11-01 15:04:31 +01:00
Requirements :: delete_combined_files ( 'RequirementsTest_bc.js' );
2008-07-18 01:32:31 +02:00
2008-07-18 05:47:17 +02:00
// require files normally (e.g. called from a FormField instance)
2008-11-01 15:04:31 +01:00
Requirements :: javascript ( SAPPHIRE_DIR . '/tests/forms/RequirementsTest_a.js' );
Requirements :: javascript ( SAPPHIRE_DIR . '/tests/forms/RequirementsTest_b.js' );
Requirements :: javascript ( SAPPHIRE_DIR . '/tests/forms/RequirementsTest_c.js' );
2008-07-18 05:47:17 +02:00
// require two of those files as combined includes
Requirements :: combine_files (
2008-11-01 15:04:31 +01:00
'RequirementsTest_bc.js' ,
2008-07-18 05:47:17 +02:00
array (
2008-11-01 15:04:31 +01:00
SAPPHIRE_DIR . '/tests/forms/RequirementsTest_b.js' ,
SAPPHIRE_DIR . '/tests/forms/RequirementsTest_c.js'
2008-07-18 05:47:17 +02:00
)
);
2008-07-18 01:32:31 +02:00
}
2008-11-07 03:06:28 +01:00
function testRequirementsBackend () {
$requirements = new Requirements_Backend ();
$requirements -> javascript ( SAPPHIRE_DIR . '/tests/forms/a.js' );
$this -> assertTrue ( count ( $requirements -> get_javascript ()) == 1 , " There should be only 1 file included in required javascript. " );
$this -> assertTrue ( in_array ( SAPPHIRE_DIR . '/tests/forms/a.js' , $requirements -> get_javascript ()), " /test/forms/a.js should be included in required javascript. " );
$requirements -> javascript ( SAPPHIRE_DIR . '/tests/forms/b.js' );
$this -> assertTrue ( count ( $requirements -> get_javascript ()) == 2 , " There should be 2 files included in required javascript. " );
$requirements -> block ( SAPPHIRE_DIR . '/tests/forms/a.js' );
$this -> assertTrue ( count ( $requirements -> get_javascript ()) == 1 , " There should be only 1 file included in required javascript. " );
$this -> assertFalse ( in_array ( SAPPHIRE_DIR . '/tests/forms/a.js' , $requirements -> get_javascript ()), " /test/forms/a.js should not be included in required javascript after it has been blocked. " );
$this -> assertTrue ( in_array ( SAPPHIRE_DIR . '/tests/forms/b.js' , $requirements -> get_javascript ()), " /test/forms/b.js should be included in required javascript. " );
$requirements -> css ( SAPPHIRE_DIR . '/tests/forms/a.css' );
$this -> assertTrue ( count ( $requirements -> get_css ()) == 1 , " There should be only 1 file included in required css. " );
$this -> assertArrayHasKey ( SAPPHIRE_DIR . '/tests/forms/a.css' , $requirements -> get_css (), " /tests/forms/a.css should be in required css. " );
$requirements -> block ( SAPPHIRE_DIR . '/tests/forms/a.css' );
$this -> assertTrue ( count ( $requirements -> get_css ()) == 0 , " There should be nothing in required css after file has been blocked. " );
}
2008-07-18 01:32:31 +02:00
}
?>