Browse Source

datastream validation objectively rather than procedurally

pull/463/head
qadan 11 years ago
parent
commit
9a7acddf2a
  1. 872
      tests/datastream_validators.inc
  2. 63
      tests/islandora_web_test_case.inc
  3. 10
      tests/scripts/travis_setup.sh

872
tests/datastream_validators.inc

File diff suppressed because it is too large Load Diff

63
tests/islandora_web_test_case.inc

@ -216,37 +216,72 @@ class IslandoraWebTestCase extends DrupalWebTestCase {
/** /**
* Attempts to validate an array of datastreams, generally via binary checks. * Attempts to validate an array of datastreams, generally via binary checks.
* *
* These functions exist in, and can be added to, datastream_validators.inc, * Datastream validation classes exist in, and can be added to, the file
* which is found in this folder. * 'datastream_validators.inc', which is found in this folder. Datastream
* validator classes use the naming convention 'PrefixDatastreamValidator',
* and that 'Prefix' is what this function uses to determine what class to
* instantiate.
* *
* $param AbstractObject $object * $param IslandoraFedoraObject $object
* The object to load datastreams from. * The object to load datastreams from.
* $param array $datastreams * $param array $datastreams
* An array of paired DSIDs, validate function names, and optional params. * An array of arrays that pair DSIDs, DatastreamValidator class prefixes,
* and optional params - e.g. array(
* array('DSID', 'TIFF'),
* array('DSID2, 'Text', array('param 1', 'param 2')),
* ) and so on.
*/ */
public function validateDatastreams($object, array $datastreams) { public function validateDatastreams($object, array $datastreams) {
if (!is_object($object)) { if (!is_object($object)) {
$this->fail("Failed. Object passed in is invalid.", 'Islandora'); $this->fail("Datastream validation failed; Object passed in is invalid.", 'Islandora');
return;
} }
module_load_include('inc', 'islandora', 'tests/datastream_validators'); module_load_include('inc', 'islandora', 'tests/datastream_validators');
foreach ($datastreams as $datastream) { foreach ($datastreams as $datastream) {
if (isset($object[$datastream[0]])) { // Let's give them conventional names.
$function = 'islandora_validate_' . $datastream[1] . '_datastream'; $dsid = $datastream[0];
if (function_exists($function)) { $prefix = $datastream[1];
$params = array();
if (isset($datastream[2])) { if (isset($datastream[2])) {
$results = $function($object, $datastream[0], $datastream[2]); $params = $datastream[2];
}
// Legacy tests were created before the CamelCase conventions of the class
// system now in place. So, we need to automagically seek out prefixes
// that start with a lower-case letter and convert them to the proper
// format (rather than fixing every single legacy test).
if (ctype_lower(substr($prefix, 0, 1))) {
// Handle the case where the prefix is "image".
if ($prefix === 'image') {
$prefix = 'Image';
} }
// Handle the case where the prefix is "text".
elseif ($prefix === 'text') {
$prefix = 'Text';
}
// All other cases involve just converting everything to caps.
else { else {
$results = $function($object, $datastream[0]); $prefix = strtoupper($prefix);
} }
foreach ($results as $result) {
$this->assertTrue($result[0], $result[1], 'Islandora');
} }
// Instantiate the appropriate class, grab the passes and fails.
$class_name = "{$prefix}DatastreamValidator";
if (class_exists($class_name)) {
$validator = new $class_name($object, $dsid, $params);
foreach ($validator->getPasses() as $message => $caller) {
$this->assert(TRUE, $message, 'Islandora', $caller);
} }
else { foreach ($validator->getFails() as $message => $caller) {
$this->fail("No {$datastream[0]} validation function exists for the {$datastream[1]} datastream.", 'Islandora'); $this->assert(FALSE, $message, 'Islandora', $caller);
} }
} }
else {
$this->fail("No DatastreamValidator class was found with the name '$class_name'; are you sure the prefix given to IslandoraWebTestCase->validateDatastreams() was entered correctly, or that such a validator exists?", 'Islandora');
}
} }
} }

10
tests/scripts/travis_setup.sh

@ -21,15 +21,7 @@ pear channel-discover pear.phpqatools.org
pear channel-discover pear.netpirates.net pear channel-discover pear.netpirates.net
pear install pear/PHP_CodeSniffer-1.4.8 pear install pear/PHP_CodeSniffer-1.4.8
pear install pear.phpunit.de/phpcpd pear install pear.phpunit.de/phpcpd
pear install drush/drush-5.9.0
# Install Drush
git clone https://github.com/drush-ops/drush.git
pushd drush
git checkout 5.9.0
chmod +x drush
popd
sudo ln -s $HOME/drush/drush /usr/local/sbin
phpenv rehash phpenv rehash
drush dl --yes drupal drush dl --yes drupal
cd drupal-* cd drupal-*

Loading…
Cancel
Save