PageRenderTime 29ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/suites/unit/joomla/string/JStringTest.php

http://github.com/joomla/joomla-platform
PHP | 897 lines | 306 code | 65 blank | 526 comment | 19 complexity | abfa297ab5bfb5e7b68bdaec6827988f MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1
  1. <?php
  2. /**
  3. * @package Joomla.UnitTest
  4. * @subpackage Utilities
  5. *
  6. * @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
  7. * @license GNU General Public License version 2 or later; see LICENSE
  8. */
  9. require_once 'TestHelpers/JString-helper-dataset.php';
  10. /**
  11. * Test class for JString.
  12. * Generated by PHPUnit on 2009-10-26 at 22:29:34.
  13. *
  14. * @package Joomla.UnitTest
  15. * @subpackage String
  16. * @since 11.3
  17. */
  18. class JStringTest extends PHPUnit_Framework_TestCase
  19. {
  20. /**
  21. * @var JString
  22. * @since 11.2
  23. */
  24. protected $object;
  25. /**
  26. * Test...
  27. *
  28. * @return array
  29. *
  30. * @since 11.2
  31. */
  32. public function getIncrementData()
  33. {
  34. return JStringTest_DataSet::$increment;
  35. }
  36. /**
  37. * Test...
  38. *
  39. * @return array
  40. *
  41. * @since 11.2
  42. */
  43. public function getStrposData()
  44. {
  45. return JStringTest_DataSet::$strposTests;
  46. }
  47. /**
  48. * Test...
  49. *
  50. * @return array
  51. *
  52. * @since 11.2
  53. */
  54. public function getStrrposData()
  55. {
  56. return JStringTest_DataSet::$strrposTests;
  57. }
  58. /**
  59. * Test...
  60. *
  61. * @return array
  62. *
  63. * @since 11.2
  64. */
  65. public function getSubstrData()
  66. {
  67. return JStringTest_DataSet::$substrTests;
  68. }
  69. /**
  70. * Test...
  71. *
  72. * @return array
  73. *
  74. * @since 11.2
  75. */
  76. public function getStrtolowerData()
  77. {
  78. return JStringTest_DataSet::$strtolowerTests;
  79. }
  80. /**
  81. * Test...
  82. *
  83. * @return array
  84. *
  85. * @since 11.2
  86. */
  87. public function getStrtoupperData()
  88. {
  89. return JStringTest_DataSet::$strtoupperTests;
  90. }
  91. /**
  92. * Test...
  93. *
  94. * @return array
  95. *
  96. * @since 11.2
  97. */
  98. public function getStrlenData()
  99. {
  100. return JStringTest_DataSet::$strlenTests;
  101. }
  102. /**
  103. * Test...
  104. *
  105. * @return array
  106. *
  107. * @since 11.2
  108. */
  109. public function getStr_ireplaceData()
  110. {
  111. return JStringTest_DataSet::$str_ireplaceTests;
  112. }
  113. /**
  114. * Test...
  115. *
  116. * @return array
  117. *
  118. * @since 11.2
  119. */
  120. public function getStr_splitData()
  121. {
  122. return JStringTest_DataSet::$str_splitTests;
  123. }
  124. /**
  125. * Test...
  126. *
  127. * @return array
  128. *
  129. * @since 11.2
  130. */
  131. public function getStrcasecmpData()
  132. {
  133. return JStringTest_DataSet::$strcasecmpTests;
  134. }
  135. /**
  136. * Test...
  137. *
  138. * @return array
  139. *
  140. * @since 11.2
  141. */
  142. public function getStrcmpData()
  143. {
  144. return JStringTest_DataSet::$strcmpTests;
  145. }
  146. /**
  147. * Test...
  148. *
  149. * @return array
  150. *
  151. * @since 11.2
  152. */
  153. public function getStrcspnData()
  154. {
  155. return JStringTest_DataSet::$strcspnTests;
  156. }
  157. /**
  158. * Test...
  159. *
  160. * @return array
  161. *
  162. * @since 11.2
  163. */
  164. public function getStristrData()
  165. {
  166. return JStringTest_DataSet::$stristrTests;
  167. }
  168. /**
  169. * Test...
  170. *
  171. * @return array
  172. *
  173. * @since 11.2
  174. */
  175. public function getStrrevData()
  176. {
  177. return JStringTest_DataSet::$strrevTests;
  178. }
  179. /**
  180. * Test...
  181. *
  182. * @return array
  183. *
  184. * @since 11.2
  185. */
  186. public function getStrspnData()
  187. {
  188. return JStringTest_DataSet::$strspnTests;
  189. }
  190. /**
  191. * Test...
  192. *
  193. * @return array
  194. *
  195. * @since 11.2
  196. */
  197. public function getSubstr_replaceData()
  198. {
  199. return JStringTest_DataSet::$substr_replaceTests;
  200. }
  201. /**
  202. * Test...
  203. *
  204. * @return array
  205. *
  206. * @since 11.2
  207. */
  208. public function getLtrimData()
  209. {
  210. return JStringTest_DataSet::$ltrimTests;
  211. }
  212. /**
  213. * Test...
  214. *
  215. * @return array
  216. *
  217. * @since 11.2
  218. */
  219. public function getRtrimData()
  220. {
  221. return JStringTest_DataSet::$rtrimTests;
  222. }
  223. /**
  224. * Test...
  225. *
  226. * @return array
  227. *
  228. * @since 11.2
  229. */
  230. public function getTrimData()
  231. {
  232. return JStringTest_DataSet::$trimTests;
  233. }
  234. /**
  235. * Test...
  236. *
  237. * @return array
  238. *
  239. * @since 11.2
  240. */
  241. public function getUcfirstData()
  242. {
  243. return JStringTest_DataSet::$ucfirstTests;
  244. }
  245. /**
  246. * Test...
  247. *
  248. * @return array
  249. *
  250. * @since 11.2
  251. */
  252. public function getUcwordsData()
  253. {
  254. return JStringTest_DataSet::$ucwordsTests;
  255. }
  256. /**
  257. * Test...
  258. *
  259. * @return array
  260. *
  261. * @since 11.2
  262. */
  263. public function getTranscodeData()
  264. {
  265. return JStringTest_DataSet::$transcodeTests;
  266. }
  267. /**
  268. * Test...
  269. *
  270. * @return array
  271. *
  272. * @since 11.2
  273. */
  274. public function getValidData()
  275. {
  276. return JStringTest_DataSet::$validTests;
  277. }
  278. /**
  279. * Test...
  280. *
  281. * @param string $string @todo
  282. * @param string $style @todo
  283. * @param string $number @todo
  284. * @param string $expected @todo
  285. *
  286. * @return void
  287. *
  288. * @dataProvider getIncrementData
  289. * @since 11.2
  290. * @covers JString::increment
  291. */
  292. public function testIncrement($string, $style, $number, $expected)
  293. {
  294. $this->assertThat(
  295. JString::increment($string, $style, $number),
  296. $this->equalTo($expected)
  297. );
  298. }
  299. // @codingStandardsIgnoreStart
  300. // @todo Arguments with default values must be at the end of the argument list
  301. /**
  302. * Test...
  303. *
  304. * @param string $haystack @todo
  305. * @param string $needle @todo
  306. * @param integer $offset @todo
  307. * @param string $expect @todo
  308. *
  309. * @return void
  310. *
  311. * @dataProvider getStrposData
  312. * @since 11.2
  313. * @covers JString::strpos
  314. */
  315. public function testStrpos($haystack, $needle, $offset = 0, $expect)
  316. {
  317. $actual = JString::strpos($haystack, $needle, $offset);
  318. $this->assertEquals($expect, $actual);
  319. }
  320. // @codingStandardsIgnoreEnd
  321. // @codingStandardsIgnoreStart
  322. // @todo Arguments with default values must be at the end of the argument list
  323. /**
  324. * Test...
  325. *
  326. * @param string $haystack @todo
  327. * @param string $needle @todo
  328. * @param integer $offset @todo
  329. * @param string $expect @todo
  330. *
  331. * @return array
  332. *
  333. * @dataProvider getStrrposData
  334. * @since 11.2
  335. * @covers JString::strrpos
  336. */
  337. public function testStrrpos($haystack, $needle, $offset = 0, $expect)
  338. {
  339. $actual = JString::strrpos($haystack, $needle, $offset);
  340. $this->assertEquals($expect, $actual);
  341. }
  342. // @codingStandardsIgnoreEnd
  343. // @codingStandardsIgnoreStart
  344. // @todo Arguments with default values must be at the end of the argument list
  345. /**
  346. * Test...
  347. *
  348. * @param string $string @todo
  349. * @param string $start @todo
  350. * @param bool|int $length @todo
  351. * @param string $expect @todo
  352. *
  353. * @return array
  354. *
  355. * @dataProvider getSubstrData
  356. * @since 11.2
  357. * @covers JString::substr
  358. */
  359. public function testSubstr($string, $start, $length = false, $expect)
  360. {
  361. $actual = JString::substr($string, $start, $length);
  362. $this->assertEquals($expect, $actual);
  363. }
  364. // @codingStandardsIgnoreEnd
  365. /**
  366. * Test...
  367. *
  368. * @param string $string @todo
  369. * @param string $expect @todo
  370. *
  371. * @return array
  372. *
  373. * @dataProvider getStrtolowerData
  374. * @since 11.2
  375. * @covers JString::strtolower
  376. */
  377. public function testStrtolower($string, $expect)
  378. {
  379. $actual = JString::strtolower($string);
  380. $this->assertEquals($expect, $actual);
  381. }
  382. /**
  383. * Test...
  384. *
  385. * @param string $string @todo
  386. * @param string $expect @todo
  387. *
  388. * @return array
  389. *
  390. * @dataProvider getStrtoupperData
  391. * @since 11.2
  392. * @covers JString::strtoupper
  393. */
  394. public function testStrtoupper($string, $expect)
  395. {
  396. $actual = JString::strtoupper($string);
  397. $this->assertEquals($expect, $actual);
  398. }
  399. /**
  400. * Test...
  401. *
  402. * @param string $string @todo
  403. * @param string $expect @todo
  404. *
  405. * @return array
  406. *
  407. * @dataProvider getStrlenData
  408. * @since 11.2
  409. * @covers JString::strlen
  410. */
  411. public function testStrlen($string, $expect)
  412. {
  413. $actual = JString::strlen($string);
  414. $this->assertEquals($expect, $actual);
  415. }
  416. /**
  417. * Test...
  418. *
  419. * @param string $search @todo
  420. * @param string $replace @todo
  421. * @param string $subject @todo
  422. * @param integer $count @todo
  423. * @param string $expect @todo
  424. *
  425. * @return array
  426. *
  427. * @dataProvider getStr_ireplaceData
  428. * @since 11.2
  429. * @covers JString::str_ireplace
  430. */
  431. public function testStr_ireplace($search, $replace, $subject, $count, $expect)
  432. {
  433. $actual = JString::str_ireplace($search, $replace, $subject, $count);
  434. $this->assertEquals($expect, $actual);
  435. }
  436. /**
  437. * Test...
  438. *
  439. * @param string $string @todo
  440. * @param string $split_length @todo
  441. * @param string $expect @todo
  442. *
  443. * @return array
  444. *
  445. * @dataProvider getStr_splitData
  446. * @since 11.2
  447. * @covers JString::str_split
  448. */
  449. public function testStr_split($string, $split_length, $expect)
  450. {
  451. $actual = JString::str_split($string, $split_length);
  452. $this->assertEquals($expect, $actual);
  453. }
  454. /**
  455. * Test...
  456. *
  457. * @param string $string1 @todo
  458. * @param string $string2 @todo
  459. * @param string $locale @todo
  460. * @param string $expect @todo
  461. *
  462. * @return array
  463. *
  464. * @dataProvider getStrcasecmpData
  465. * @since 11.2
  466. * @covers JString::strcasecmp
  467. */
  468. public function testStrcasecmp($string1, $string2, $locale, $expect)
  469. {
  470. if (substr(php_uname(), 0, 6) == 'Darwin' && $locale != false)
  471. {
  472. $this->markTestSkipped('Darwin bug prevents foreign conversion from working properly');
  473. }
  474. elseif ($locale != false && !setlocale(LC_COLLATE, $locale))
  475. {
  476. $this->markTestSkipped("Locale {$locale} is not available.");
  477. }
  478. else
  479. {
  480. $actual = JString::strcasecmp($string1, $string2, $locale);
  481. if ($actual != 0)
  482. {
  483. $actual = $actual / abs($actual);
  484. }
  485. $this->assertEquals($expect, $actual);
  486. }
  487. }
  488. /**
  489. * Test...
  490. *
  491. * @param string $string1 @todo
  492. * @param string $string2 @todo
  493. * @param string $locale @todo
  494. * @param string $expect @todo
  495. *
  496. * @return array
  497. *
  498. * @dataProvider getStrcmpData
  499. * @since 11.2
  500. * @covers JString::strcmp
  501. */
  502. public function testStrcmp($string1, $string2, $locale, $expect)
  503. {
  504. if (substr(php_uname(), 0, 6) == 'Darwin' && $locale != false)
  505. {
  506. $this->markTestSkipped('Darwin bug prevents foreign conversion from working properly');
  507. }
  508. elseif ($locale != false && !setlocale(LC_COLLATE, $locale))
  509. {
  510. // If the locale is not available, we can't have to transcode the string and can't reliably compare it.
  511. $this->markTestSkipped("Locale {$locale} is not available.");
  512. }
  513. else
  514. {
  515. $actual = JString::strcmp($string1, $string2, $locale);
  516. if ($actual != 0)
  517. {
  518. $actual = $actual / abs($actual);
  519. }
  520. $this->assertEquals($expect, $actual);
  521. }
  522. }
  523. /**
  524. * Test...
  525. *
  526. * @param string $haystack @todo
  527. * @param string $needles @todo
  528. * @param integer $start @todo
  529. * @param integer $len @todo
  530. * @param string $expect @todo
  531. *
  532. * @return array
  533. *
  534. * @dataProvider getStrcspnData
  535. * @since 11.2
  536. * @covers JString::strcspn
  537. */
  538. public function testStrcspn($haystack, $needles, $start, $len, $expect)
  539. {
  540. $actual = JString::strcspn($haystack, $needles, $start, $len);
  541. $this->assertEquals($expect, $actual);
  542. }
  543. /**
  544. * Test...
  545. *
  546. * @param string $haystack @todo
  547. * @param string $needle @todo
  548. * @param string $expect @todo
  549. *
  550. * @return array
  551. *
  552. * @dataProvider getStristrData
  553. * @since 11.2
  554. * @covers JString::stristr
  555. */
  556. public function testStristr($haystack, $needle, $expect)
  557. {
  558. $actual = JString::stristr($haystack, $needle);
  559. $this->assertEquals($expect, $actual);
  560. }
  561. /**
  562. * Test...
  563. *
  564. * @param string $string @todo
  565. * @param string $expect @todo
  566. *
  567. * @return array
  568. *
  569. * @dataProvider getStrrevData
  570. * @since 11.2
  571. * @covers JString::strrev
  572. */
  573. public function testStrrev($string, $expect)
  574. {
  575. $actual = JString::strrev($string);
  576. $this->assertEquals($expect, $actual);
  577. }
  578. /**
  579. * Test...
  580. *
  581. * @param string $subject @todo
  582. * @param string $mask @todo
  583. * @param integer $start @todo
  584. * @param integer $length @todo
  585. * @param string $expect @todo
  586. *
  587. * @return array
  588. *
  589. * @dataProvider getStrspnData
  590. * @since 11.2
  591. * @covers JString::strspn
  592. */
  593. public function testStrspn($subject, $mask, $start, $length, $expect)
  594. {
  595. $actual = JString::strspn($subject, $mask, $start, $length);
  596. $this->assertEquals($expect, $actual);
  597. }
  598. /**
  599. * Test...
  600. *
  601. * @param string $string @todo
  602. * @param string $replacement @todo
  603. * @param integer $start @todo
  604. * @param integer $length @todo
  605. * @param string $expect @todo
  606. *
  607. * @return array
  608. *
  609. * @dataProvider getSubstr_replaceData
  610. * @since 11.2
  611. * @covers JString::substr_replace
  612. */
  613. public function testSubstr_replace($string, $replacement, $start, $length, $expect)
  614. {
  615. $actual = JString::substr_replace($string, $replacement, $start, $length);
  616. $this->assertEquals($expect, $actual);
  617. }
  618. /**
  619. * Test...
  620. *
  621. * @param string $string @todo
  622. * @param string $charlist @todo
  623. * @param string $expect @todo
  624. *
  625. * @return array
  626. *
  627. * @dataProvider getLtrimData
  628. * @since 11.2
  629. * @covers JString::ltrim
  630. */
  631. public function testLtrim($string, $charlist, $expect)
  632. {
  633. if ($charlist === null)
  634. {
  635. $actual = JString::ltrim($string);
  636. }
  637. else
  638. {
  639. $actual = JString::ltrim($string, $charlist);
  640. }
  641. $this->assertEquals($expect, $actual);
  642. }
  643. /**
  644. * Test...
  645. *
  646. * @param string $string @todo
  647. * @param string $charlist @todo
  648. * @param string $expect @todo
  649. *
  650. * @return array
  651. *
  652. * @dataProvider getRtrimData
  653. * @since 11.2
  654. * @covers JString::rtrim
  655. */
  656. public function testRtrim($string, $charlist, $expect)
  657. {
  658. if ($charlist === null)
  659. {
  660. $actual = JString::rtrim($string);
  661. }
  662. else
  663. {
  664. $actual = JString::rtrim($string, $charlist);
  665. }
  666. $this->assertEquals($expect, $actual);
  667. }
  668. /**
  669. * Test...
  670. *
  671. * @param string $string @todo
  672. * @param string $charlist @todo
  673. * @param string $expect @todo
  674. *
  675. * @return array
  676. *
  677. * @dataProvider getTrimData
  678. * @since 11.2
  679. * @covers JString::trim
  680. */
  681. public function testTrim($string, $charlist, $expect)
  682. {
  683. if ($charlist === null)
  684. {
  685. $actual = JString::trim($string);
  686. }
  687. else
  688. {
  689. $actual = JString::trim($string, $charlist);
  690. }
  691. $this->assertEquals($expect, $actual);
  692. }
  693. /**
  694. * Test...
  695. *
  696. * @param string $string @todo
  697. * @param string $delimiter @todo
  698. * @param string $newDelimiter @todo
  699. * @param string $expect @todo
  700. *
  701. * @return array
  702. *
  703. * @dataProvider getUcfirstData
  704. * @since 11.2
  705. * @covers JString::ucfirst
  706. */
  707. public function testUcfirst($string, $delimiter, $newDelimiter, $expect)
  708. {
  709. $actual = JString::ucfirst($string, $delimiter, $newDelimiter);
  710. $this->assertEquals($expect, $actual);
  711. }
  712. /**
  713. * Test...
  714. *
  715. * @param string $string @todo
  716. * @param string $expect @todo
  717. *
  718. * @return array
  719. *
  720. * @dataProvider getUcwordsData
  721. * @since 11.2
  722. * @covers JString::ucwords
  723. */
  724. public function testUcwords($string, $expect)
  725. {
  726. $actual = JString::ucwords($string);
  727. $this->assertEquals($expect, $actual);
  728. }
  729. /**
  730. * Test...
  731. *
  732. * @param string $source @todo
  733. * @param string $from_encoding @todo
  734. * @param string $to_encoding @todo
  735. * @param string $expect @todo
  736. *
  737. * @return array
  738. *
  739. * @dataProvider getTranscodeData
  740. * @since 11.2
  741. * @covers JString::transcode
  742. */
  743. public function testTranscode($source, $from_encoding, $to_encoding, $expect)
  744. {
  745. $actual = JString::transcode($source, $from_encoding, $to_encoding);
  746. $this->assertEquals($expect, $actual);
  747. }
  748. /**
  749. * Test...
  750. *
  751. * @param string $string @todo
  752. * @param string $expect @todo
  753. *
  754. * @return array
  755. *
  756. * @dataProvider getValidData
  757. * @since 11.2
  758. * @covers JString::valid
  759. */
  760. public function testValid($string, $expect)
  761. {
  762. $actual = JString::valid($string);
  763. $this->assertEquals($expect, $actual);
  764. }
  765. /**
  766. * Test...
  767. *
  768. * @param string $string @todo
  769. * @param string $expect @todo
  770. *
  771. * @return array
  772. *
  773. * @dataProvider getValidData
  774. * @since 11.2
  775. * @covers JString::compliant
  776. */
  777. public function testCompliant($string, $expect)
  778. {
  779. $actual = JString::compliant($string);
  780. $this->assertEquals($expect, $actual);
  781. }
  782. /**
  783. * Test...
  784. *
  785. * @return array
  786. *
  787. * @since 11.2
  788. * @covers JString::parse_url
  789. */
  790. public function testParse_Url()
  791. {
  792. $url = 'http://localhost/joomla_development/j16_trunk/administrator/index.php?option=com_contact&view=contact&layout=edit&id=5';
  793. $expected = parse_url($url);
  794. $actual = JString::parse_url($url);
  795. $this->assertEquals($expected, $actual, 'Line: ' . __LINE__ . ' Results should be equal');
  796. // Test all parts of query
  797. $url = 'https://john:doe@www.google.com:80/folder/page.html#id?var=kay&var2=key&true';
  798. $expected = parse_url($url);
  799. $actual = JString::parse_url($url);
  800. $this->assertEquals($expected, $actual, 'Line: ' . __LINE__ . ' Results should be equal');
  801. // Test special characters in URL
  802. $url = 'http://joomla.org/mytestpath/È';
  803. $expected = parse_url($url);
  804. // Fix up path for UTF-8 characters
  805. $expected['path'] = '/mytestpath/È';
  806. $actual = JString::parse_url($url);
  807. $this->assertEquals($expected, $actual, 'Line: ' . __LINE__ . ' Results should be equal');
  808. // Test special characters in URL
  809. $url = 'http://mydomain.com/!*\'();:@&=+$,/?%#[]" \\';
  810. $expected = parse_url($url);
  811. $actual = JString::parse_url($url);
  812. $this->assertEquals($expected, $actual, 'Line: ' . __LINE__ . ' Results should be equal');
  813. // Test url encoding in URL
  814. $url = 'http://mydomain.com/%21%2A%27%28%29%3B%3A%40%26%3D%24%2C%2F%3F%25%23%5B%22%20%5C';
  815. $expected = parse_url($url);
  816. $actual = JString::parse_url($url);
  817. $this->assertEquals($expected, $actual, 'Line: ' . __LINE__ . ' Results should be equal');
  818. // Test a mix of the above
  819. $url = 'http://john:doe@mydomain.com:80/%È21%25È3*%(';
  820. $expected = parse_url($url);
  821. // Fix up path for UTF-8 characters
  822. $expected['path'] = '/%È21%25È3*%(';
  823. $actual = JString::parse_url($url);
  824. $this->assertEquals($expected, $actual, 'Line: ' . __LINE__ . ' Results should be equal');
  825. // Test invalild URL
  826. $url = 'http:///mydomain.com';
  827. $expected = parse_url($url);
  828. $actual = JString::parse_url($url);
  829. $this->assertEquals($expected, $actual, 'Line: ' . __LINE__ . ' Results should be equal');
  830. }
  831. }