Commit | Line | Data |
---|---|---|
6a488035 TO |
1 | <?php |
2 | ||
aba1cd8b EM |
3 | /** |
4 | * Class CRM_Extension_InfoTest | |
acb109b7 | 5 | * @group headless |
aba1cd8b | 6 | */ |
6a488035 | 7 | class CRM_Extension_InfoTest extends CiviUnitTestCase { |
39b959db | 8 | |
00be9182 | 9 | public function setUp() { |
6a488035 TO |
10 | parent::setUp(); |
11 | $this->file = NULL; | |
12 | } | |
13 | ||
00be9182 | 14 | public function tearDown() { |
6a488035 TO |
15 | if ($this->file) { |
16 | unlink($this->file); | |
17 | } | |
18 | parent::tearDown(); | |
19 | } | |
20 | ||
00be9182 | 21 | public function testGood_file() { |
6a488035 TO |
22 | $this->file = tempnam(sys_get_temp_dir(), 'infoxml-'); |
23 | file_put_contents($this->file, "<extension key='test.foo' type='module'><file>foo</file><typeInfo><extra>zamboni</extra></typeInfo></extension>"); | |
24 | ||
25 | $info = CRM_Extension_Info::loadFromFile($this->file); | |
26 | $this->assertEquals('test.foo', $info->key); | |
27 | $this->assertEquals('foo', $info->file); | |
28 | $this->assertEquals('zamboni', $info->typeInfo['extra']); | |
29 | } | |
30 | ||
00be9182 | 31 | public function testBad_file() { |
6a488035 TO |
32 | // <file> vs file> |
33 | $this->file = tempnam(sys_get_temp_dir(), 'infoxml-'); | |
34 | file_put_contents($this->file, "<extension key='test.foo' type='module'>file>foo</file></extension>"); | |
35 | ||
36 | $exc = NULL; | |
37 | try { | |
38 | $info = CRM_Extension_Info::loadFromFile($this->file); | |
0db6c3e1 TO |
39 | } |
40 | catch (CRM_Extension_Exception $e) { | |
6a488035 TO |
41 | $exc = $e; |
42 | } | |
43 | $this->assertTrue(is_object($exc)); | |
44 | } | |
45 | ||
00be9182 | 46 | public function testGood_string() { |
6a488035 TO |
47 | $data = "<extension key='test.foo' type='module'><file>foo</file><typeInfo><extra>zamboni</extra></typeInfo></extension>"; |
48 | ||
49 | $info = CRM_Extension_Info::loadFromString($data); | |
50 | $this->assertEquals('test.foo', $info->key); | |
51 | $this->assertEquals('foo', $info->file); | |
52 | $this->assertEquals('zamboni', $info->typeInfo['extra']); | |
f21a105f TO |
53 | $this->assertEquals(array(), $info->requires); |
54 | } | |
55 | ||
56 | public function testGood_string_extras() { | |
57 | $data = "<extension key='test.bar' type='module'><file>testbar</file> | |
58 | <classloader><psr4 prefix=\"Civi\\\" path=\"Civi\"/></classloader> | |
59 | <requires><ext>org.civicrm.a</ext><ext>org.civicrm.b</ext></requires> | |
60 | </extension> | |
61 | "; | |
62 | ||
63 | $info = CRM_Extension_Info::loadFromString($data); | |
64 | $this->assertEquals('test.bar', $info->key); | |
65 | $this->assertEquals('testbar', $info->file); | |
66 | $this->assertEquals('Civi\\', $info->classloader[0]['prefix']); | |
67 | $this->assertEquals('Civi', $info->classloader[0]['path']); | |
68 | $this->assertEquals(array('org.civicrm.a', 'org.civicrm.b'), $info->requires); | |
6a488035 TO |
69 | } |
70 | ||
00be9182 | 71 | public function testBad_string() { |
6a488035 TO |
72 | // <file> vs file> |
73 | $data = "<extension key='test.foo' type='module'>file>foo</file></extension>"; | |
74 | ||
75 | $exc = NULL; | |
76 | try { | |
77 | $info = CRM_Extension_Info::loadFromString($data); | |
0db6c3e1 TO |
78 | } |
79 | catch (CRM_Extension_Exception $e) { | |
6a488035 TO |
80 | $exc = $e; |
81 | } | |
82 | $this->assertTrue(is_object($exc)); | |
83 | } | |
96025800 | 84 | |
e4c4f267 CW |
85 | public function test_requirements() { |
86 | // Quicksearch requirement should get filtered out per extension-compatibility.json | |
87 | $data = "<extension key='test.foo' type='module'><file>foo</file><requires><ext>example.test</ext><ext>com.ixiam.modules.quicksearch</ext></requires></extension>"; | |
88 | ||
89 | $info = CRM_Extension_Info::loadFromString($data); | |
90 | $this->assertEquals(['example.test'], $info->requires); | |
91 | } | |
92 | ||
6a488035 | 93 | } |