civicrm/foo/bar Foo Bar The foo is one with the bar. CRM_Foo_Page_Bar Customize Data and Screens admin/small/foo.png 10 '; $xml = simplexml_load_string($xmlString); $menu = array(); CRM_Core_Menu::readXML($xml, $menu); $this->assertTrue(isset($menu['civicrm/foo/bar'])); $this->assertEquals('Foo Bar', $menu['civicrm/foo/bar']['title']); $this->assertEquals('The foo is one with the bar.', $menu['civicrm/foo/bar']['desc']); $this->assertEquals('CRM_Foo_Page_Bar', $menu['civicrm/foo/bar']['page_callback']); $this->assertEquals('Customize Data and Screens', $menu['civicrm/foo/bar']['adminGroup']); $this->assertEquals('admin/small/foo.png', $menu['civicrm/foo/bar']['icon']); $this->assertEquals('10', $menu['civicrm/foo/bar']['weight']); $this->assertTrue(!isset($menu['civicrm/foo/bar']['ids_arguments'])); } public function testReadXML_IDS() { $xmlString = ' civicrm/foo/bar Foo Bar alpha beta gamma '; $xml = simplexml_load_string($xmlString); $menu = array(); CRM_Core_Menu::readXML($xml, $menu); $this->assertTrue(isset($menu['civicrm/foo/bar'])); $this->assertEquals('Foo Bar', $menu['civicrm/foo/bar']['title']); $this->assertEquals(array('alpha', 'beta'), $menu['civicrm/foo/bar']['ids_arguments']['json']); $this->assertEquals(array('gamma'), $menu['civicrm/foo/bar']['ids_arguments']['exceptions']); $this->assertEquals(array(), $menu['civicrm/foo/bar']['ids_arguments']['html']); $idsConfig = CRM_Core_IDS::createRouteConfig($menu['civicrm/foo/bar']); $this->assertTrue(in_array('alpha', $idsConfig['General']['json'])); // XML $this->assertTrue(in_array('beta', $idsConfig['General']['json'])); // XML $this->assertTrue(in_array('gamma', $idsConfig['General']['exceptions'])); // XML $this->assertTrue(in_array('thankyou_text', $idsConfig['General']['exceptions'])); // Inherited } /** * Check that novel data elements in the menu are correctly * stored and loaded. */ public function testModuleData() { CRM_Core_Menu::store(TRUE); $item = CRM_Core_Menu::get('civicrm/case'); $this->assertFalse(isset($item['ids_arguments']['exceptions'])); $this->assertFalse(isset($item['whimsy'])); CRM_Utils_Hook::singleton()->setHook('civicrm_alterMenu', function(&$items){ $items['civicrm/case']['ids_arguments']['exceptions'][] = 'foobar'; $items['civicrm/case']['whimsy'] = 'godliness'; }); CRM_Core_Menu::store(TRUE); $item = CRM_Core_Menu::get('civicrm/case'); $this->assertTrue(in_array('foobar', $item['ids_arguments']['exceptions'])); $this->assertEquals('godliness', $item['whimsy']); } /** * @return array */ public function pathArguments() { $cases = array(); // array(0 => string $input, 1 => array $expectedOutput) //$cases[] = array(NULL, array()); //$cases[] = array('', array()); //$cases[] = array('freestanding', array('freestanding' => NULL)); $cases[] = array('addSequence=1', array('addSequence' => '1')); $cases[] = array('attachUpload=1', array('attachUpload' => '1')); $cases[] = array('mode=256', array('mode' => '256')); $cases[] = array( 'mode=256,addSequence=1,attachUpload=1', array('mode' => '256', 'addSequence' => '1', 'attachUpload' => 1), ); $cases[] = array( 'mode=256,urlToSession=a:b:c:d', array( 'mode' => '256', 'urlToSession' => array( array('urlVar' => 'a', 'sessionVar' => 'b', 'type' => 'c', 'default' => 'd'), ), ), ); $cases[] = array( 'mode=256,urlToSession=a:b:c:d;z:y:x:w', array( 'mode' => '256', 'urlToSession' => array( array('urlVar' => 'a', 'sessionVar' => 'b', 'type' => 'c', 'default' => 'd'), array('urlVar' => 'z', 'sessionVar' => 'y', 'type' => 'x', 'default' => 'w'), ), ), ); $cases[] = array('url=whiz!;.:#=%/|+bang?', array('url' => 'whiz!;.:#=%/|+bang?')); return $cases; } /** * @param $inputString * @param $expectedArray * @dataProvider pathArguments */ public function testGetArrayForPathArgs($inputString, $expectedArray) { $actual = CRM_Core_Menu::getArrayForPathArgs($inputString); $this->assertEquals($expectedArray, $actual); } }