file = NULL; } public function tearDown() { if ($this->file) { unlink($this->file); } parent::tearDown(); } public function testGood_file() { $this->file = tempnam(sys_get_temp_dir(), 'infoxml-'); file_put_contents($this->file, "foozamboni"); $info = CRM_Extension_Info::loadFromFile($this->file); $this->assertEquals('test.foo', $info->key); $this->assertEquals('foo', $info->file); $this->assertEquals('zamboni', $info->typeInfo['extra']); } public function testBad_file() { // vs file> $this->file = tempnam(sys_get_temp_dir(), 'infoxml-'); file_put_contents($this->file, "file>foo"); $exc = NULL; try { $info = CRM_Extension_Info::loadFromFile($this->file); } catch (CRM_Extension_Exception $e) { $exc = $e; } $this->assertTrue(is_object($exc)); } public function testGood_string() { $data = "foozamboni"; $info = CRM_Extension_Info::loadFromString($data); $this->assertEquals('test.foo', $info->key); $this->assertEquals('foo', $info->file); $this->assertEquals('zamboni', $info->typeInfo['extra']); $this->assertEquals([], $info->requires); } public function testGood_string_extras() { $data = "testbar org.civicrm.aorg.civicrm.b "; $info = CRM_Extension_Info::loadFromString($data); $this->assertEquals('test.bar', $info->key); $this->assertEquals('testbar', $info->file); $this->assertEquals('Civi\\', $info->classloader[0]['prefix']); $this->assertEquals('Civi', $info->classloader[0]['path']); $this->assertEquals(['org.civicrm.a', 'org.civicrm.b'], $info->requires); } public function testBad_string() { // vs file> $data = "file>foo"; $exc = NULL; try { $info = CRM_Extension_Info::loadFromString($data); } catch (CRM_Extension_Exception $e) { $exc = $e; } $this->assertTrue(is_object($exc)); } public function test_requirements() { // Quicksearch requirement should get filtered out per extension-compatibility.json $data = "fooexample.testcom.ixiam.modules.quicksearch"; $info = CRM_Extension_Info::loadFromString($data); $this->assertEquals(['example.test'], $info->requires); } }