diff options
Diffstat (limited to 'includes/tests/registry.test')
-rw-r--r-- | includes/tests/registry.test | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/includes/tests/registry.test b/includes/tests/registry.test new file mode 100644 index 000000000..93fea4009 --- /dev/null +++ b/includes/tests/registry.test @@ -0,0 +1,152 @@ +<?php + +class RegistryParseFileTestCase extends DrupalWebTestCase { + + /** + * Implementation of getInfo(). + */ + function getInfo() { + return array( + 'name' => t('Registry parse file test'), + 'description' => t('Parse a simple file and check that its resources are saved to the database.'), + 'group' => t('System') + ); + } + + /** + * Implementation of setUp(). + */ + function setUp() { + $this->fileName = 'registry_test_' . md5(rand()); + $this->functionName = 'registry_test_function' . md5(rand()); + $this->className = 'registry_test_class' . md5(rand()); + $this->interfaceName = 'registry_test_interface' . md5(rand()); + parent::setUp(); + } + + /** + * testRegistryParseFile + */ + function testRegistryParseFile() { + _registry_parse_file($this->fileName, $this->getFileContents()); + foreach (array('functionName', 'className', 'interfaceName') as $resource) { + $foundName = db_result(db_query("SELECT name FROM {registry} WHERE name = '%s'", $this->$resource)); + $this->assertTrue($this->$resource == $foundName, t('Resource "@resource" found.', array('@resource' => $this->$resource))); + } + } + + /** + * getFileContents + */ + function getFileContents() { + $file_contents = <<<CONTENTS +<?php + +function {$this->functionName}() {} + +class {$this->className} {} + +interface {$this->interfaceName} {} + +CONTENTS; + return $file_contents; + } + +} + +class RegistryParseFilesTestCase extends DrupalWebTestCase { + + protected $fileTypes = array('new', 'existing_changed'); + + /** + * Implementation of getInfo(). + */ + function getInfo() { + return array( + 'name' => t('Registry parse files test'), + 'description' => t('Read two a simple files from disc, and check that their resources are saved to the database.'), + 'group' => t('System') + ); + } + + /** + * Implementation of setUp(). + */ + function setUp() { + parent::setUp(); + // Create files with some php to parse - one 'new', one 'existing' so + // we test all the important code paths in _registry_parse_files. + foreach ($this->fileTypes as $fileType) { + $this->$fileType = new StdClass(); + $this->$fileType->fileName = file_directory_path() . '/registry_test_' . md5(rand()); + $this->$fileType->functionName = 'registry_test_function' . md5(rand()); + $this->$fileType->className = 'registry_test_class' . md5(rand()); + $this->$fileType->interfaceName = 'registry_test_interface' . md5(rand()); + $this->$fileType->contents = $this->getFileContents($fileType); + file_save_data($this->$fileType->contents, $this->$fileType->fileName); + + if ($fileType == 'existing_changed') { + // Insert a record with a dodgy md5. + $this->$fileType->fakeMD5 = md5($this->$fileType->contents . rand()); + db_query("INSERT INTO {registry_file} (md5, filename) VALUES ('%s', '%s')", $this->$fileType->fakeMD5, './' . $this->$fileType->fileName); + + // Insert some fake resource records. + foreach (array('function', 'class', 'interface') as $type) { + db_query("INSERT INTO {registry} (name, type, filename) VALUES ('%s', '%s', '%s')", $type . md5(rand()), $type, './' . $this->$fileType->fileName); + } + } + } + } + + /** + * testRegistryParseFiles + */ + function testRegistryParseFiles() { + _registry_parse_files($this->getFiles()); + foreach ($this->fileTypes as $fileType) { + // Test that we have all the right resources. + foreach (array('functionName', 'className', 'interfaceName') as $resource) { + $foundName = db_result(db_query("SELECT name FROM {registry} WHERE name = '%s'", $this->$fileType->$resource)); + $this->assertTrue($this->$fileType->$resource == $foundName, t('Resource "@resource" found.', array('@resource' => $this->$fileType->$resource))); + } + // Test that we have the right md5. + $md5 = db_result(db_query("SELECT md5 FROM {registry_file} WHERE filename = '%s'", './' . $this->$fileType->fileName)); + $this->assertTrue(md5($this->$fileType->contents) == $md5, t('MD5 for "@filename" matched.' . $fileType . $md5, array('@filename' => $this->$fileType->fileName))); + } + } + + /** + * getFiles + */ + function getFiles() { + $files = array(); + foreach ($this->fileTypes as $fileType) { + if ($fileType == 'existing_changed') { + $files['./' . $this->$fileType->fileName] = array('md5' => $this->$fileType->fakeMD5); + } + else { + $files['./' . $this->$fileType->fileName] = array(); + } + } + return $files; + } + + /** + * getFileContents + */ + function getFileContents($fileType) { + $file_contents = <<<CONTENTS +<?php + +function {$this->$fileType->functionName}() {} + +class {$this->$fileType->className} {} + +interface {$this->$fileType->interfaceName} {} + +CONTENTS; + return $file_contents; + } + +} + |