Merge pull request #19870 from totten/master-psr0
[civicrm-core.git] / tests / phpunit / CRM / Extension / InfoTest.php
index 879cb76288c7ca7d979665727c06088d69ebf697..75e082a73bdd9bd7e78c970c070bac9e79d6e2e5 100644 (file)
@@ -5,12 +5,13 @@
  * @group headless
  */
 class CRM_Extension_InfoTest extends CiviUnitTestCase {
+
   public function setUp() {
     parent::setUp();
     $this->file = NULL;
   }
 
-  public function tearDown() {
+  public function tearDown(): void {
     if ($this->file) {
       unlink($this->file);
     }
@@ -49,12 +50,15 @@ class CRM_Extension_InfoTest extends CiviUnitTestCase {
     $this->assertEquals('test.foo', $info->key);
     $this->assertEquals('foo', $info->file);
     $this->assertEquals('zamboni', $info->typeInfo['extra']);
-    $this->assertEquals(array(), $info->requires);
+    $this->assertEquals([], $info->requires);
   }
 
   public function testGood_string_extras() {
     $data = "<extension key='test.bar' type='module'><file>testbar</file>
-      <classloader><psr4 prefix=\"Civi\\\" path=\"Civi\"/></classloader>
+      <classloader>
+        <psr4 prefix=\"Civi\\\" path=\"Civi\"/>
+        <psr0 prefix=\"CRM_\" path=\"\"/>
+      </classloader>
       <requires><ext>org.civicrm.a</ext><ext>org.civicrm.b</ext></requires>
     </extension>
     ";
@@ -64,7 +68,43 @@ class CRM_Extension_InfoTest extends CiviUnitTestCase {
     $this->assertEquals('testbar', $info->file);
     $this->assertEquals('Civi\\', $info->classloader[0]['prefix']);
     $this->assertEquals('Civi', $info->classloader[0]['path']);
-    $this->assertEquals(array('org.civicrm.a', 'org.civicrm.b'), $info->requires);
+    $this->assertEquals('psr4', $info->classloader[0]['type']);
+    $this->assertEquals('CRM_', $info->classloader[1]['prefix']);
+    $this->assertEquals('', $info->classloader[1]['path']);
+    $this->assertEquals('psr0', $info->classloader[1]['type']);
+    $this->assertEquals(['org.civicrm.a', 'org.civicrm.b'], $info->requires);
+  }
+
+  public function getExampleAuthors() {
+    $authorAliceXml = '<author><name>Alice</name><email>alice@example.org</email><role>Maintainer</role></author>';
+    $authorAliceArr = ['name' => 'Alice', 'email' => 'alice@example.org', 'role' => 'Maintainer'];
+    $authorBobXml = ' <author><name>Bob</name><homepage>https://example.com/bob</homepage><role>Developer</role></author>';
+    $authorBobArr = ['name' => 'Bob', 'homepage' => 'https://example.com/bob', 'role' => 'Developer'];
+
+    $maintAliceXml = '<maintainer><author>Alice</author><email>alice@example.org</email></maintainer>';
+    $maintAliceArr = ['author' => 'Alice', 'email' => 'alice@example.org'];
+
+    $hdr = "<extension key='test.author' type='module'><file>testauthor</file>";
+    $ftr = "</extension>";
+
+    // Maintainers can be inputted via either <maintainer> or <authors> (with role).
+    // Maintainers are outputted via both `$info->maintainer` and `$info->authors` (with role)
+
+    $cases = [];
+    $cases[] = ["{$hdr}{$maintAliceXml}{$ftr}", [$authorAliceArr], $maintAliceArr];
+    $cases[] = ["{$hdr}<authors>{$authorAliceXml}</authors>{$ftr}", [$authorAliceArr], $maintAliceArr];
+    $cases[] = ["{$hdr}<authors>{$authorAliceXml}{$authorBobXml}</authors>{$ftr}", [$authorAliceArr, $authorBobArr], $maintAliceArr];
+    $cases[] = ["{$hdr}<authors>{$authorBobXml}</authors>{$ftr}", [$authorBobArr], NULL];
+    return $cases;
+  }
+
+  /**
+   * @dataProvider getExampleAuthors
+   */
+  public function testAuthors($xmlString, $expectAuthors, $expectMaintainer) {
+    $info = CRM_Extension_Info::loadFromString($xmlString);
+    $this->assertEquals($expectAuthors, $info->authors);
+    $this->assertEquals($expectMaintainer, $info->maintainer);
   }
 
   public function testBad_string() {