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