(REF) ExampleDataLoader - Extract private method `createObj()`. Improve errors.
authorTim Otten <totten@civicrm.org>
Tue, 14 Sep 2021 23:45:14 +0000 (16:45 -0700)
committerTim Otten <totten@civicrm.org>
Wed, 15 Sep 2021 00:18:17 +0000 (17:18 -0700)
__Before__: Two different bits of code responsible for loading+instantiating test-data class.
Different (and somewhat opaque) error-handling behaviors.

__After__: One private helper called twice. Consistent (and clearer) error-reporting.

Civi/Test/ExampleDataLoader.php

index 115f0a8de908a73bbc9ad86a15a662ceb4a77412..68a0443bc70c64a26bba606ea3d62661bd6f85e5 100644 (file)
@@ -64,10 +64,7 @@ class ExampleDataLoader {
       return NULL;
     }
 
-    if ($example['file']) {
-      include_once $example['file'];
-    }
-    $obj = new $example['class']();
+    $obj = $this->createObj($example['file'], $example['class']);
     $obj->build($example);
     return $example;
   }
@@ -91,8 +88,7 @@ class ExampleDataLoader {
 
     $all = [];
     foreach ($classes as $file => $class) {
-      require_once $file;
-      $obj = new $class();
+      $obj = $this->createObj($file, $class);
       $offset = 0;
       foreach ($obj->getExamples() as $example) {
         $example['file'] = $file;
@@ -132,4 +128,15 @@ class ExampleDataLoader {
     return $r;
   }
 
+  private function createObj(?string $file, ?string $class): ExampleDataInterface {
+    if ($file) {
+      include_once $file;
+    }
+    if (!class_exists($class)) {
+      throw new \CRM_Core_Exception("Failed to read example (class '{$class}' in file '{$file}')");
+    }
+
+    return new $class();
+  }
+
 }