Commit | Line | Data |
---|---|---|
6a488035 TO |
1 | <?php |
2 | require_once 'CiviTest/CiviUnitTestCase.php'; | |
aba1cd8b EM |
3 | |
4 | /** | |
5 | * Class CRM_Utils_StringTest | |
6 | */ | |
6a488035 | 7 | class CRM_Utils_StringTest extends CiviUnitTestCase { |
6a488035 TO |
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 | ||
6a488035 TO |
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']); | |
e65f9c8f E |
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)); | |
6a488035 TO |
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)); | |
7a0ea0f3 | 89 | } |
6a488035 TO |
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 | } | |
fc7a0aee | 103 | |
4cbe18b8 EM |
104 | /** |
105 | * @return array | |
106 | */ | |
fc7a0aee TO |
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 | } | |
a5b8726f TO |
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 | ||
6a488035 TO |
159 | } |
160 |