PhoneNumberTest.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace Faker\Test\Provider\en_US;
  3. use Faker\Generator;
  4. use Faker\Provider\en_US\PhoneNumber;
  5. use PHPUnit\Framework\TestCase;
  6. class PhoneNumberTest extends TestCase
  7. {
  8. /**
  9. * @var Generator
  10. */
  11. private $faker;
  12. public function setUp()
  13. {
  14. $faker = new Generator();
  15. $faker->addProvider(new PhoneNumber($faker));
  16. $this->faker = $faker;
  17. }
  18. public function testPhoneNumber()
  19. {
  20. for ($i = 0; $i < 100; $i++) {
  21. $number = $this->faker->phoneNumber;
  22. $baseNumber = preg_replace('/ *x.*$/', '', $number); // Remove possible extension
  23. $digits = array_values(array_filter(str_split($baseNumber), 'ctype_digit'));
  24. // Prefix '1' allowed
  25. if (count($digits) === 11) {
  26. $this->assertEquals('1', $digits[0]);
  27. $digits = array_slice($digits, 1);
  28. }
  29. // 10 digits
  30. $this->assertEquals(10, count($digits));
  31. // Last two digits of area code cannot be identical
  32. $this->assertNotEquals($digits[1], $digits[2]);
  33. // Last two digits of exchange code cannot be 1
  34. if ($digits[4] === 1) {
  35. $this->assertNotEquals($digits[4], $digits[5]);
  36. }
  37. // Test format
  38. $this->assertRegExp('/^(\+?1)?([ -.]*\d{3}[ -.]*| *\(\d{3}\) *)\d{3}[-.]?\d{4}$/', $baseNumber);
  39. }
  40. }
  41. public function testTollFreeAreaCode()
  42. {
  43. $this->assertContains($this->faker->tollFreeAreaCode, array(800, 822, 833, 844, 855, 866, 877, 888, 880, 887, 889));
  44. }
  45. public function testTollFreePhoneNumber()
  46. {
  47. for ($i = 0; $i < 100; $i++) {
  48. $number = $this->faker->tollFreePhoneNumber;
  49. $digits = array_values(array_filter(str_split($number), 'ctype_digit'));
  50. // Prefix '1' allowed
  51. if (count($digits) === 11) {
  52. $this->assertEquals('1', $digits[0]);
  53. $digits = array_slice($digits, 1);
  54. }
  55. // 10 digits
  56. $this->assertEquals(10, count($digits));
  57. $areaCode = $digits[0] . $digits[1] . $digits[2];
  58. $this->assertContains($areaCode, array('800', '822', '833', '844', '855', '866', '877', '888', '880', '887', '889'));
  59. // Last two digits of exchange code cannot be 1
  60. if ($digits[4] === 1) {
  61. $this->assertNotEquals($digits[4], $digits[5]);
  62. }
  63. // Test format
  64. $this->assertRegExp('/^(\+?1)?([ -.]*\d{3}[ -.]*| *\(\d{3}\) *)\d{3}[-.]?\d{4}$/', $number);
  65. }
  66. }
  67. }