assertTrue(PersianText::sameName("علي اكبري", 'علی اکبری')); } public function testHalfSpaceAndExtraWhitespace(): void { $this->assertTrue(PersianText::sameName("محمد\u{200C}رضا کریمی ", 'محمد رضا کریمی')); } public function testPersianAndArabicDigits(): void { $this->assertSame('1371/1/1', PersianText::normalize('۱۳۷۱/۱/۱')); $this->assertSame('0912', PersianText::normalize('٠٩١٢')); } public function testStripDoctorTitle(): void { $this->assertSame('فرخنده حسینی', PersianText::stripDoctorTitle('دکتر فرخنده حسینی')); $this->assertSame('فرخنده حسینی', PersianText::stripDoctorTitle(' دکتر فرخنده حسینی ')); $this->assertSame('فرخنده حسینی', PersianText::stripDoctorTitle('فرخنده حسینی')); $this->assertSame('صفورا حجازی نیا', PersianText::stripDoctorTitle('دکتر صفورا حجازی نیا')); // پیشوند متوالی و کافِ عربی $this->assertSame('صفورا حجازی نیا', PersianText::stripDoctorTitle('دکتر دکتر صفورا حجازی نیا')); $this->assertSame('علی اکبری', PersianText::stripDoctorTitle('دكتر علي اكبري')); } public function testDifferentNamesStayDifferent(): void { $this->assertFalse(PersianText::sameName('علی اکبری', 'ولی اکبری')); } public function testWithDoctorTitlePrependsExactlyOnce(): void { $this->assertSame('دکتر فرخنده حسینی', PersianText::withDoctorTitle('فرخنده حسینی')); // نامِ از پیش عنوان‌دار «دکتر دکتر …» نمی‌شود $this->assertSame('دکتر فرخنده حسینی', PersianText::withDoctorTitle('دکتر فرخنده حسینی')); $this->assertSame('دکتر فرخنده حسینی', PersianText::withDoctorTitle('دکتر دکتر فرخنده حسینی')); // خالی/نال → رشتهٔ خالی (نه «دکتر» تنها) $this->assertSame('', PersianText::withDoctorTitle('')); $this->assertSame('', PersianText::withDoctorTitle(null)); $this->assertSame('', PersianText::withDoctorTitle(' ')); } }