File "NameTest.php"

Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/swedbank-pay-payments/vendor/adci/full-name-parser/tests/NameTest.php
File size: 15.2 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace ADCI\FullNameParser\Test;

use ADCI\FullNameParser\Parser;
use PHPUnit\Framework\TestCase;

/**
 * Test case based on https://github.com/davidgorges/HumanNameParser.php .
 *
 * @coversDefaultClass \ADCI\FullNameParser\Parser
 * @group FullNameParser
 */
class NameTest extends TestCase
{

    /**
     * Assert error message.
     *
     * @var string
     */
    const OUTPUT_STR = "failed to ensure correct %s (%s) in name %s";

    /**
     * Parser variable.
     *
     * @var \ADCI\FullNameParser\Parser
     */
    private $parser;

    /**
     * {@inheritdoc}
     */
    protected function setUp()
    {
        parent::setUp();
        $this->parser = new Parser();
    }

    /**
     * Simple test on suffix parsing.
     *
     * @throws \ADCI\FullNameParser\Exception\NameParsingException
     * @coversDefaultClass
     */
    public function testSuffix()
    {
        $name = 'Björn O\'Malley, Jr.';
        $nameObject = $this->parser->parse($name);
        $this->assertEquals('O\'Malley', $nameObject->getLastName());
        $this->assertEquals('Björn', $nameObject->getFirstName());
        $this->assertEquals('Jr.', $nameObject->getSuffix());
    }

    /**
     * Simple parsing test.
     *
     * @throws \ADCI\FullNameParser\Exception\NameParsingException
     * @coversDefaultClass
     */
    public function testSimple()
    {
        $name = 'Hans Meiser';
        $nameObject = $this->parser->parse($name);
        $this->assertEquals('Hans', $nameObject->getFirstName());
        $this->assertEquals('Meiser', $nameObject->getLastName());
    }

    /**
     * Simple parsing test with comma.
     *
     * @throws \ADCI\FullNameParser\Exception\NameParsingException
     * @coversDefaultClass
     */
    public function testReverse()
    {
        $name = 'Meiser, Hans';
        $nameObject = $this->parser->parse($name);
        $this->assertEquals('Hans', $nameObject->getFirstName());
        $this->assertEquals('Meiser', $nameObject->getLastName());
    }

    /**
     * Simple parsing test with comma and title.
     *
     * @throws \ADCI\FullNameParser\Exception\NameParsingException
     * @coversDefaultClass
     */
    public function testReverseWithAcademicTitle()
    {
        $name = 'Dr. Meiser, Hans';
        $nameObject = $this->parser->parse($name);
        $this->assertEquals('Dr.', $nameObject->getAcademicTitle());
        $this->assertEquals('Meiser', $nameObject->getLastName());
        $this->assertEquals('Hans', $nameObject->getFirstName());
    }

    /**
     * Simple parsing test with title.
     *
     * @throws \ADCI\FullNameParser\Exception\NameParsingException
     * @coversDefaultClass
     */
    public function testAcademicTitle()
    {
        $name = 'Dr. Hans Meiser';
        $nameObject = $this->parser->parse($name);
        $this->assertEquals('Dr.', $nameObject->getAcademicTitle());
        $this->assertEquals('Meiser', $nameObject->getLastName());
        $this->assertEquals('Hans', $nameObject->getFirstName());
    }

    /**
     * Simple parsing test with prefix.
     *
     * @throws \ADCI\FullNameParser\Exception\NameParsingException
     * @coversDefaultClass
     */
    public function testLastNameWithPrefix()
    {
        $name = 'Björn van Olst';
        $nameObject = $this->parser->parse($name);
        $this->assertEquals('van Olst', $nameObject->getLastName());
        $this->assertEquals('Björn', $nameObject->getFirstName());
    }

    /**
     * Exception test.
     *
     * @expectedException \ADCI\FullNameParser\Exception\FirstNameNotFoundException
     * @throws \ADCI\FullNameParser\Exception\NameParsingException
     * @covers \ADCI\FullNameParser\Exception\FirstNameNotFoundException
     */
    public function testNoFirstNameDefaultException()
    {
        $name = 'Mr. Hyde';
        $this->parser->parse($name);
    }

    /**
     * Exception test.
     *
     * @expectedException \ADCI\FullNameParser\Exception\LastNameNotFoundException
     * @throws \ADCI\FullNameParser\Exception\NameParsingException
     * @covers \ADCI\FullNameParser\Exception\LastNameNotFoundException
     */
    public function testNoLastNameDefaultException()
    {
        $name = 'Edward';
        $this->parser->parse($name);
    }

    /**
     * Simple last name parsing test.
     *
     * @throws \ADCI\FullNameParser\Exception\NameParsingException
     * @coversDefaultClass
     */
    public function testFirstNameNotMandatory()
    {
        $this->parser = new Parser(['mandatory_first_name' => false]);
        $name = 'Dr. Jekyll';
        $nameObject = $this->parser->parse($name);
        $this->assertEquals('Dr.', $nameObject->getAcademicTitle());
        $this->assertEquals('Jekyll', $nameObject->getLastName());
    }

    /**
     * Simple first name parsing test.
     *
     * @throws \ADCI\FullNameParser\Exception\NameParsingException
     * @coversDefaultClass
     */
    public function testLastNameNotMandatory()
    {
        $this->parser = new Parser(['mandatory_last_name' => false]);
        $name = 'Henry';
        $nameObject = $this->parser->parse($name);
        $this->assertEquals('Henry', $nameObject->getFirstName());
    }

    /**
     * Simple middle name parsing test.
     *
     * @throws \ADCI\FullNameParser\Exception\NameParsingException
     * @coversDefaultClass
     */
    public function testMiddleNameNotMandatory()
    {
        $name = 'Dr. Hans Meiser';
        $this->parser = new Parser(['mandatory_middle_name' => false]);
        $nameObject = $this->parser->parse($name);
        $this->assertEquals('Dr.', $nameObject->getAcademicTitle());
        $this->assertEquals('Meiser', $nameObject->getLastName());
        $this->assertEquals('Hans', $nameObject->getFirstName());
    }

    /**
     * Exception test.
     *
     * @expectedException \ADCI\FullNameParser\Exception\FirstNameNotFoundException
     * @throws \ADCI\FullNameParser\Exception\NameParsingException
     * @covers \ADCI\FullNameParser\Exception\FirstNameNotFoundException
     */
    public function testFirstNameMandatory()
    {
        $this->parser = new Parser(['mandatory_first_name' => true]);
        $name = 'Mr. Hyde';
        $this->parser->parse($name);
    }

    /**
     * Exception test.
     *
     * @expectedException \ADCI\FullNameParser\Exception\LastNameNotFoundException
     * @throws \ADCI\FullNameParser\Exception\NameParsingException
     * @covers \ADCI\FullNameParser\Exception\LastNameNotFoundException
     */
    public function testLastNameMandatory()
    {
        $this->parser = new Parser(['mandatory_last_name' => true]);
        $name = 'Edward';
        $this->parser->parse($name);
    }

    /**
     * Complex name parsing test.
     *
     * @throws \ADCI\FullNameParser\Exception\NameParsingException
     * @coversDefaultClass
     */
    public function testNameList()
    {
        foreach (self::NAMES as $nameStr) {
            foreach ((array)$nameStr['original'] as $name) {
                $nameObject = $this->parser->parse($name);
                $error_msg = sprintf(self::OUTPUT_STR, "leading initial", $nameStr['leading'], $name);
                $this->assertEquals($nameStr['leading'], $nameObject->getLeadingInitial(), $error_msg);
                $error_msg = sprintf(self::OUTPUT_STR, "first name", $nameStr['first'], $name);
                $this->assertEquals($nameStr['first'], $nameObject->getFirstName(), $error_msg);
                $error_msg = sprintf(self::OUTPUT_STR, "nickname", $nameStr['nick'], $name);
                $this->assertEquals($nameStr['nick'], $nameObject->getNickNames(), $error_msg);
                $error_msg = sprintf(self::OUTPUT_STR, "middle name", $nameStr['middle'], $name);
                $this->assertEquals($nameStr['middle'], $nameObject->getMiddleName(), $error_msg);
                $error_msg = sprintf(self::OUTPUT_STR, "last name", $nameStr['last'], $name);
                $this->assertEquals($nameStr['last'], $nameObject->getLastName(), $error_msg);
                $error_msg = sprintf(self::OUTPUT_STR, "suffix", $nameStr['suffix'], $name);
                $this->assertEquals($nameStr['suffix'], $nameObject->getSuffix(), $error_msg);
            }
        }
    }

    /**
     * Test case for complex parsing.
     *
     * @var array
     */
    const NAMES = [
        [
            'original' => ['Björn O\'Malley', 'O\'Malley, Björn'],
            'leading' => '',
            'first' => 'Björn',
            'nick' => '',
            'middle' => '',
            'last' => 'O\'Malley',
            'suffix' => '',
        ],
        [
            'original' => 'Bin Lin',
            'leading' => '',
            'first' => 'Bin',
            'nick' => '',
            'middle' => '',
            'last' => 'Lin',
            'suffix' => '',
        ],
        [
            'original' => 'Linda Jones',
            'leading' => '',
            'first' => 'Linda',
            'nick' => '',
            'middle' => '',
            'last' => 'Jones',
            'suffix' => '',
        ],
        [
            'original' => 'Jason H. Priem',
            'leading' => '',
            'first' => 'Jason',
            'nick' => '',
            'middle' => 'H.',
            'last' => 'Priem',
            'suffix' => '',
        ],
        [
            'original' => 'Björn O\'Malley-Muñoz',
            'leading' => '',
            'first' => 'Björn',
            'nick' => '',
            'middle' => '',
            'last' => 'O\'Malley-Muñoz',
            'suffix' => '',
        ],
        [
            'original' => 'Björn C. O\'Malley',
            'leading' => '',
            'first' => 'Björn',
            'nick' => '',
            'middle' => 'C.',
            'last' => 'O\'Malley',
            'suffix' => '',
        ],
        [
            'original' => [
                'Björn "Bill" O\'Malley',
                'Björn ("Bill") O\'Malley',
                'Björn (Bill) O\'Malley',
                'Björn \'Bill\' O\'Malley',
            ],
            'leading' => '',
            'first' => 'Björn',
            'nick' => 'Bill',
            'middle' => '',
            'last' => 'O\'Malley',
            'suffix' => '',
        ],
        [
            'original' => 'Björn ("Wild Bill") O\'Malley',
            'leading' => '',
            'first' => 'Björn',
            'nick' => 'Wild Bill',
            'middle' => '',
            'last' => 'O\'Malley',
            'suffix' => '',
        ],
        [
            'original' => 'Björn C O\'Malley',
            'leading' => '',
            'first' => 'Björn',
            'nick' => '',
            'middle' => 'C',
            'last' => 'O\'Malley',
            'suffix' => '',
        ],
        [
            'original' => 'Björn C. R. O\'Malley',
            'leading' => '',
            'first' => 'Björn',
            'nick' => '',
            'middle' => 'C. R.',
            'last' => 'O\'Malley',
            'suffix' => '',
        ],
        [
            'original' => 'Björn Charles O\'Malley',
            'leading' => '',
            'first' => 'Björn',
            'nick' => '',
            'middle' => 'Charles',
            'last' => 'O\'Malley',
            'suffix' => '',
        ],
        [
            'original' => 'Björn Charles R. O\'Malley',
            'leading' => '',
            'first' => 'Björn',
            'nick' => '',
            'middle' => 'Charles R.',
            'last' => 'O\'Malley',
            'suffix' => '',
        ],
        [
            'original' => 'Björn van O\'Malley',
            'leading' => '',
            'first' => 'Björn',
            'nick' => '',
            'middle' => '',
            'last' => 'van O\'Malley',
            'suffix' => '',
        ],
        [
            'original' => 'Björn Charles van der O\'Malley',
            'leading' => '',
            'first' => 'Björn',
            'nick' => '',
            'middle' => 'Charles',
            'last' => 'van der O\'Malley',
            'suffix' => '',
        ],
        [
            'original' => 'Björn Charles O\'Malley y Muñoz',
            'leading' => '',
            'first' => 'Björn',
            'nick' => '',
            'middle' => 'Charles',
            'last' => 'O\'Malley y Muñoz',
            'suffix' => '',
        ],
        [
            'original' => 'Björn O\'Malley, Jr.',
            'leading' => '',
            'first' => 'Björn',
            'nick' => '',
            'middle' => '',
            'last' => 'O\'Malley',
            'suffix' => 'Jr.',
        ],
        [
            'original' => ['Björn O\'Malley Jr', 'O\'Malley, Björn Jr'],
            'leading' => '',
            'first' => 'Björn',
            'nick' => '',
            'middle' => '',
            'last' => 'O\'Malley',
            'suffix' => 'Jr',
        ],
        [
            'original' => 'B O\'Malley',
            'leading' => '',
            'first' => 'B',
            'nick' => '',
            'middle' => '',
            'last' => 'O\'Malley',
            'suffix' => '',
        ],
        [
            'original' => 'William Carlos Williams',
            'leading' => '',
            'first' => 'William',
            'nick' => '',
            'middle' => 'Carlos',
            'last' => 'Williams',
            'suffix' => '',
        ],
        [
            'original' => 'C. Björn Roger O\'Malley',
            'leading' => 'C.',
            'first' => 'Björn',
            'nick' => '',
            'middle' => 'Roger',
            'last' => 'O\'Malley',
            'suffix' => '',
        ],
        [
            'original' => 'B. C. O\'Malley',
            'leading' => '',
            'first' => 'B.',
            'nick' => '',
            'middle' => 'C.',
            'last' => 'O\'Malley',
            'suffix' => '',
        ],
        [
            'original' => 'B C O\'Malley',
            'leading' => '',
            'first' => 'B',
            'nick' => '',
            'middle' => 'C',
            'last' => 'O\'Malley',
            'suffix' => '',
        ],
        [
            'original' => 'B.J. Thomas',
            'leading' => '',
            'first' => 'B.J.',
            'nick' => '',
            'middle' => '',
            'last' => 'Thomas',
            'suffix' => '',
        ],
        [
            'original' => 'O\'Malley, C. Björn',
            'leading' => 'C.',
            'first' => 'Björn',
            'nick' => '',
            'middle' => '',
            'last' => 'O\'Malley',
            'suffix' => '',
        ],
        [
            'original' => 'O\'Malley, C. Björn III',
            'leading' => 'C.',
            'first' => 'Björn',
            'nick' => '',
            'middle' => '',
            'last' => 'O\'Malley',
            'suffix' => 'III',
        ],
        [
            'original' => 'O\'Malley y Muñoz, C. Björn Roger III',
            'leading' => 'C.',
            'first' => 'Björn',
            'nick' => '',
            'middle' => 'Roger',
            'last' => 'O\'Malley y Muñoz',
            'suffix' => 'III',
        ],
        /* @see https://github.com/ADCI/full-name-parser/issues/8 */
        [
            'original' => 'Arantes Rodrigues, R',
            'leading' => 'R',
            'title' => '',
            'first' => 'Arantes',
            'middle' => '',
            'last' => 'Rodrigues',
            'nick' => '',
            'suffix' => '',
            'errors' => [],
        ],
    ];
}