Merge remote-tracking branch 'origin/4.4' into 4.4-4.5-2014-09-14-13-58-42
[civicrm-core.git] / tests / phpunit / CRM / Utils / StringTest.php
1 <?php
2 require_once 'CiviTest/CiviUnitTestCase.php';
3
4 /**
5 * Class CRM_Utils_StringTest
6 */
7 class CRM_Utils_StringTest extends CiviUnitTestCase {
8 /**
9 * @return array
10 */
11 function get_info() {
12 return array(
13 'name' => 'String Test',
14 'description' => 'Test String Functions',
15 'group' => 'CiviCRM BAO Tests',
16 );
17 }
18
19 function setUp() {
20 parent::setUp();
21 }
22
23 function testStripPathChars() {
24 $testSet = array(
25 '' => '',
26 NULL => NULL,
27 'civicrm' => 'civicrm',
28 'civicrm/dashboard' => 'civicrm/dashboard',
29 'civicrm/contribute/transact' => 'civicrm/contribute/transact',
30 'civicrm/<hack>attempt</hack>' => 'civicrm/_hack_attempt_/hack_',
31 'civicrm dashboard & force = 1,;' => 'civicrm_dashboard___force___1__',
32 );
33
34
35 foreach ($testSet as $in => $expected) {
36 $out = CRM_Utils_String::stripPathChars($in);
37 $this->assertEquals($out, $expected, "Output does not match");
38 }
39 }
40
41 function testExtractName() {
42 $cases = array(
43 array(
44 'full_name' => 'Alan',
45 'first_name' => 'Alan',
46 ),
47 array(
48 'full_name' => 'Alan Arkin',
49 'first_name' => 'Alan',
50 'last_name' => 'Arkin',
51 ),
52 array(
53 'full_name' => '"Alan Arkin"',
54 'first_name' => 'Alan',
55 'last_name' => 'Arkin',
56 ),
57 array(
58 'full_name' => 'Alan A Arkin',
59 'first_name' => 'Alan',
60 'middle_name' => 'A',
61 'last_name' => 'Arkin',
62 ),
63 array(
64 'full_name' => 'Adams, Amy',
65 'first_name' => 'Amy',
66 'last_name' => 'Adams',
67 ),
68 array(
69 'full_name' => 'Adams, Amy A',
70 'first_name' => 'Amy',
71 'middle_name' => 'A',
72 'last_name' => 'Adams',
73 ),
74 array(
75 'full_name' => '"Adams, Amy A"',
76 'first_name' => 'Amy',
77 'middle_name' => 'A',
78 'last_name' => 'Adams',
79 ),
80 );
81 foreach ($cases as $case) {
82 $actual = array();
83 CRM_Utils_String::extractName($case['full_name'], $actual);
84 $this->assertEquals($actual['first_name'], $case['first_name']);
85 $this->assertEquals(CRM_Utils_Array::value('last_name', $actual), CRM_Utils_Array::value('last_name', $case));
86 $this->assertEquals(CRM_Utils_Array::value('middle_name', $actual), CRM_Utils_Array::value('middle_name', $case));
87 }
88 }
89
90 function testEllipsify() {
91 $maxLen = 5;
92 $cases = array(
93 '1' => '1',
94 '12345' => '12345',
95 '123456' => '12...',
96 );
97 foreach ($cases as $input => $expected) {
98 $this->assertEquals($expected, CRM_Utils_String::ellipsify($input, $maxLen));
99 }
100 }
101
102 function testRandom() {
103 for ($i = 0; $i < 4; $i++) {
104 $actual = CRM_Utils_String::createRandom(4, 'abc');
105 $this->assertEquals(4, strlen($actual));
106 $this->assertRegExp('/^[abc]+$/', $actual);
107
108 $actual = CRM_Utils_String::createRandom(6, '12345678');
109 $this->assertEquals(6, strlen($actual));
110 $this->assertRegExp('/^[12345678]+$/', $actual);
111 }
112 }
113
114 /**
115 * @return array
116 */
117 public function parsePrefixData() {
118 $cases = array();
119 $cases[] = array('administer CiviCRM', NULL, array(NULL, 'administer CiviCRM'));
120 $cases[] = array('administer CiviCRM', 'com_civicrm', array('com_civicrm', 'administer CiviCRM'));
121 $cases[] = array('Drupal:access user profiles', NULL, array('Drupal', 'access user profiles'));
122 $cases[] = array('Joomla:component:perm', NULL, array('Joomla', 'component:perm'));
123 return $cases;
124 }
125
126 /**
127 * @dataProvider parsePrefixData
128 */
129 public function testParsePrefix($input, $defaultPrefix, $expected) {
130 $actual = CRM_Utils_String::parsePrefix(':', $input, $defaultPrefix);
131 $this->assertEquals($expected, $actual);
132 }
133
134 function booleanDataProvider() {
135 $cases = array(); // array(0 => $input, 1 => $expectedOutput)
136 $cases[] = array(TRUE, TRUE);
137 $cases[] = array(FALSE, FALSE);
138 $cases[] = array(1, TRUE);
139 $cases[] = array(0, FALSE);
140 $cases[] = array('1', TRUE);
141 $cases[] = array('0', FALSE);
142 $cases[] = array(TRUE, TRUE);
143 $cases[] = array(FALSE, FALSE);
144 $cases[] = array('Y', TRUE);
145 $cases[] = array('N', FALSE);
146 $cases[] = array('y', TRUE);
147 $cases[] = array('n', FALSE);
148 $cases[] = array('Yes', TRUE);
149 $cases[] = array('No', FALSE);
150 $cases[] = array('True', TRUE);
151 $cases[] = array('False', FALSE);
152 $cases[] = array('yEs', TRUE);
153 $cases[] = array('nO', FALSE);
154 $cases[] = array('tRuE', TRUE);
155 $cases[] = array('FaLsE', FALSE);
156 return $cases;
157 }
158
159 /**
160 * @param $input
161 * @param $expected bool
162 * @dataProvider booleanDataProvider
163 */
164 function testStrToBool($input, $expected) {
165 $actual = CRM_Utils_String::strtobool($input);
166 $this->assertTrue($expected === $actual);
167 }
168
169 }
170