CRM_Core_Menu::getArrayForPathArgs - Allow page_arguments to include "=" in values
authortotten@civicrm.org <Tim Otten>
Fri, 27 Jun 2014 07:32:04 +0000 (00:32 -0700)
committertotten@civicrm.org <Tim Otten>
Fri, 27 Jun 2014 07:32:04 +0000 (00:32 -0700)
CRM/Core/Menu.php
tests/phpunit/CRM/Core/MenuTest.php [new file with mode: 0644]

index 79e9dd1ed8c0b89ac53997acf406b879c6136bc5..f6a80befb3d475e3be358f9721a358ad921930ab 100644 (file)
@@ -712,7 +712,7 @@ UNION (
     $elements = explode(',', $pathArgs);
     //CRM_Core_Error::debug( 'e', $elements );
     foreach ($elements as $keyVal) {
-      list($key, $val) = explode('=', $keyVal);
+      list($key, $val) = explode('=', $keyVal, 2);
       $arr[$key] = $val;
     }
 
diff --git a/tests/phpunit/CRM/Core/MenuTest.php b/tests/phpunit/CRM/Core/MenuTest.php
new file mode 100644 (file)
index 0000000..a1a406e
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+
+require_once 'CiviTest/CiviUnitTestCase.php';
+
+/**
+ * Class CRM_Core_MenuTest
+ */
+class CRM_Core_MenuTest extends CiviUnitTestCase {
+
+  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
+   */
+  function testGetArrayForPathArgs($inputString, $expectedArray) {
+    $actual = CRM_Core_Menu::getArrayForPathArgs($inputString);
+    $this->assertEquals($expectedArray, $actual);
+  }
+}
\ No newline at end of file