HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/ste.komma.pro/tests/Unit/GlobalisationTest.php
<?php

namespace Tests\Unit;

use Komma\KMS\Globalization\Language;
use Komma\KMS\Globalization\RegionInfo;
use Tests\TestCase;

class GlobalisationTest extends TestCase
{
    /**
     * @group Globalisation
     * @group G11N
     * @test
     */
    public function basictests()
    {
        $regionInfo = RegionInfo::getInstance('nl-BE');
        $this->assertEquals('Dutch (Belgium)', $regionInfo->getDisplayName());
        $this->assertEquals('Nederlands (België)', $regionInfo->getNativeName());
        $this->assertEquals('Euro', $regionInfo->getCurrencyName());
        $this->assertEquals('cent', $regionInfo->getCurrencyMinorName());
        $this->assertEquals('€', $regionInfo->getCurrencySymbol());
        $this->assertEquals('EUR', $regionInfo->getISOCurrencySymbol());
        $this->assertTrue($regionInfo->isMetric());
        $this->assertEquals('BEL', $regionInfo->getThreeLetterISORegionName());
        $this->assertEquals('BE', $regionInfo->getTwoLetterISORegionName());
        $this->assertEquals('nl-BE', $regionInfo->getName());
        $this->assertCount(1, $regionInfo->getLanguages());
        $dutchLanguage = $regionInfo->getLanguages()->first();
        $this->assertInstanceOf(Language::class, $dutchLanguage);
        /** @var Language $dutchLanguage */
        $this->assertEquals('nl', $dutchLanguage->getName());
        $this->assertEquals('Dutch', $dutchLanguage->getDisplayName());
        $this->assertEquals('Nederlands', $dutchLanguage->getNativeName());
        $this->assertEquals('nl', $dutchLanguage->getTwoLetterISOLanguageName());
        $this->assertEquals('nld', $dutchLanguage->getThreeLetterISOLanguageName());
    }

    /**
     * @group Globalisation
     * @group G11N
     * @test
     */
    public function testGetMultipleLanguagesFromRegion()
    {
        //The Netherlands
        $regionInfo = RegionInfo::getInstance('nl');
        $this->assertEquals('Netherlands', $regionInfo->getDisplayName());
        $this->assertEquals('Nederland', $regionInfo->getNativeName());
        $this->assertEquals('Euro', $regionInfo->getCurrencyName());
        $this->assertEquals('cent', $regionInfo->getCurrencyMinorName());
        $this->assertEquals('€', $regionInfo->getCurrencySymbol());
        $this->assertEquals('EUR', $regionInfo->getISOCurrencySymbol());
        $this->assertTrue($regionInfo->isMetric());
        $this->assertEquals('NLD', $regionInfo->getThreeLetterISORegionName());
        $this->assertEquals('NL', $regionInfo->getTwoLetterISORegionName());
        $this->assertEquals('NL', $regionInfo->getName());
        $this->assertCount(2, $regionInfo->getLanguages());
        $dutchLanguage = $regionInfo->getLanguages()[0];
        $fryskLanguage = $regionInfo->getLanguages()[1];
        $this->assertInstanceOf(Language::class, $dutchLanguage);
        /** @var Language $dutchLanguage */
        $this->assertEquals('nl', $dutchLanguage->getName());
        $this->assertEquals('Dutch', $dutchLanguage->getDisplayName());
        $this->assertEquals('Nederlands', $dutchLanguage->getNativeName());
        $this->assertEquals('nl', $dutchLanguage->getTwoLetterISOLanguageName());
        $this->assertEquals('nld', $dutchLanguage->getThreeLetterISOLanguageName());
            /** @var Language $fryskLanguage */
        $this->assertEquals('fy', $fryskLanguage->getName());
        $this->assertEquals('Western Frisian', $fryskLanguage->getDisplayName());
        $this->assertEquals('Frysk', $fryskLanguage->getNativeName());
        $this->assertEquals('fy', $fryskLanguage->getTwoLetterISOLanguageName());
        $this->assertEquals('fry', $fryskLanguage->getThreeLetterISOLanguageName());

        //United status
        $regionInfo = RegionInfo::getInstance('US');
        $this->assertEquals('United States', $regionInfo->getDisplayName());
        $this->assertEquals('United States', $regionInfo->getNativeName());
        $this->assertEquals('Dollar', $regionInfo->getCurrencyName());
        $this->assertEquals('cent', $regionInfo->getCurrencyMinorName());
        $this->assertEquals('$', $regionInfo->getCurrencySymbol());
        $this->assertEquals('USD', $regionInfo->getISOCurrencySymbol());
        $this->assertFalse($regionInfo->isMetric());
        $this->assertEquals('USA', $regionInfo->getThreeLetterISORegionName());
        $this->assertEquals('US', $regionInfo->getTwoLetterISORegionName());
        $this->assertEquals('US', $regionInfo->getName());
        $this->assertCount(3, $regionInfo->getLanguages());

        $englishLanguage = $regionInfo->getLanguages()[0];
        $this->assertInstanceOf(Language::class, $englishLanguage);
        /** @var Language $englishLanguage */
        $this->assertEquals('en', $englishLanguage->getName());
        $this->assertEquals('English', $englishLanguage->getDisplayName());
        $this->assertEquals('English', $englishLanguage->getNativeName());
        $this->assertEquals('en', $englishLanguage->getTwoLetterISOLanguageName());
        $this->assertEquals('eng', $englishLanguage->getThreeLetterISOLanguageName());

        $spanishLanguage = $regionInfo->getLanguages()[1];
        $this->assertInstanceOf(Language::class, $spanishLanguage);
        /** @var Language $englishLanguage */
        $this->assertEquals('es', $spanishLanguage->getName());
        $this->assertEquals('Spanish', $spanishLanguage->getDisplayName());
        $this->assertEquals('Español', $spanishLanguage->getNativeName());
        $this->assertEquals('es', $spanishLanguage->getTwoLetterISOLanguageName());
        $this->assertEquals('spa', $spanishLanguage->getThreeLetterISOLanguageName());

        $spanishLanguage = $regionInfo->getLanguages()[1];
        $this->assertInstanceOf(Language::class, $spanishLanguage);
        /** @var Language $englishLanguage */
        $this->assertEquals('es', $spanishLanguage->getName());
        $this->assertEquals('Spanish', $spanishLanguage->getDisplayName());
        $this->assertEquals('Español', $spanishLanguage->getNativeName());
        $this->assertEquals('es', $spanishLanguage->getTwoLetterISOLanguageName());
        $this->assertEquals('spa', $spanishLanguage->getThreeLetterISOLanguageName());

        $frenchLanguage = $regionInfo->getLanguages()[2];
        $this->assertInstanceOf(Language::class, $frenchLanguage);
        /** @var Language $englishLanguage */
        $this->assertEquals('fr', $frenchLanguage->getName());
        $this->assertEquals('French', $frenchLanguage->getDisplayName());
        $this->assertEquals('Français', $frenchLanguage->getNativeName());
        $this->assertEquals('fr', $frenchLanguage->getTwoLetterISOLanguageName());
        $this->assertEquals('fra', $frenchLanguage->getThreeLetterISOLanguageName());
    }

    /**
     * @group Globalisation
     * @group G11N
     * @test
     */
    public function testUTF8Language()
    {
        $regionInfo = RegionInfo::getInstance('RU');
        $this->assertEquals('Russia', $regionInfo->getDisplayName());
        $this->assertEquals('Rossiyab', $regionInfo->getNativeName());
        $this->assertEquals('Ruble', $regionInfo->getCurrencyName());
        $this->assertEquals('kopeck', $regionInfo->getCurrencyMinorName());
        $this->assertEquals('₽', $regionInfo->getCurrencySymbol());
        $this->assertEquals('RUB', $regionInfo->getISOCurrencySymbol());

        $russianLanguage = $regionInfo->getLanguages()[0];
        $this->assertInstanceOf(Language::class, $russianLanguage);
        /** @var Language $englishLanguage */
        $this->assertEquals('ru', $russianLanguage->getName());
        $this->assertEquals('Russian', $russianLanguage->getDisplayName());
        $this->assertEquals('Русский', $russianLanguage->getNativeName());
        $this->assertEquals('ru', $russianLanguage->getTwoLetterISOLanguageName());
        $this->assertEquals('rus', $russianLanguage->getThreeLetterISOLanguageName());
    }

    /**
     * @group Globalisation
     * @group G11N
     * @test
     */
    public function getIsoCurrencySymbolWhileOnlyUsingCountryIsoTest()
    {
        $regionInfo = RegionInfo::getInstance('US');
        $this->assertEquals('United States', $regionInfo->getDisplayName());
        $this->assertEquals('United States', $regionInfo->getNativeName());
        $this->assertEquals('Dollar', $regionInfo->getCurrencyName());
        $this->assertEquals('$', $regionInfo->getCurrencySymbol());
        $this->assertEquals('USD', $regionInfo->getISOCurrencySymbol());
        $this->assertFalse($regionInfo->isMetric());
        $this->assertEquals('USA', $regionInfo->getThreeLetterISORegionName());
        $this->assertEquals('US', $regionInfo->getTwoLetterISORegionName());
        $this->assertEquals('US', $regionInfo->getName());
    }

    /**
     * @group Globalisation
     * @group G11N
     * @test
     */
    public function checkTheNumberFormatInfoFromRegionInfo()
    {
        $regionInfo = RegionInfo::getInstance('US');
        $this->assertEquals(3, $regionInfo->getNumberFormat()->getCurrencyGroupSizes());
        $this->assertEquals(2, $regionInfo->getNumberFormat()->getCurrencyDecimalDigits());
        $this->assertEquals('.', $regionInfo->getNumberFormat()->getCurrencyDecimalSeparator());
        $this->assertEquals(',', $regionInfo->getNumberFormat()->getCurrencyGroupSeparator());

        $this->assertSame('10,000.25', $regionInfo->getNumberFormat()->centsToCurrency(1000025, true)); //assertSame does typechecking, assertEquals not

        $regionInfo = RegionInfo::getInstance('NL');
        $this->assertEquals(3, $regionInfo->getNumberFormat()->getCurrencyGroupSizes());
        $this->assertEquals(2, $regionInfo->getNumberFormat()->getCurrencyDecimalDigits());
        $this->assertEquals(',', $regionInfo->getNumberFormat()->getCurrencyDecimalSeparator());
        $this->assertEquals('.', $regionInfo->getNumberFormat()->getCurrencyGroupSeparator());

        $this->assertSame('10.000,25', $regionInfo->getNumberFormat()->centsToCurrency(1000025, true));

        $regionInfo = RegionInfo::getInstance('NL');
        $this->assertSame('10,01', $regionInfo->getNumberFormat()->centsToCurrency(1001, true)); //1001 divided by 100 is 10,0099999999999998. So we expect 10,01 because it should round to 2 decimal places
        $this->assertSame('10,10', $regionInfo->getNumberFormat()->centsToCurrency(1010, true)); //We expect trailing zeroes when there is a decimal and it is not of the same length as the amount of decimal digits specified
        $this->assertSame('10', $regionInfo->getNumberFormat()->centsToCurrency(1000, true)); //It drop leave the decimals when there are none by default. E.g. numbers like 10,00 should become 10
        $this->assertSame('10,00', $regionInfo->getNumberFormat()->centsToCurrency(1000, true, true)); //But if we specify an argument. We just add them.
    }

    /**
     * @group Globalisation
     * @group G11N
     * @test
     */
    public function checkGettingRegionInfoUsingWhere()
    {
        //Check if we can get greece
        $regionInfos = RegionInfo::getWhere('nativeName', '=', 'Hellas');
        $this->assertCount(1, $regionInfos);
        /** @var RegionInfo $greeceRegionInfo */
        $greeceRegionInfo = $regionInfos->first();
        $this->assertEquals('Greece', $greeceRegionInfo->getDisplayName());
    }

    /**
     * @group Globalisation
     * @group G11N
     * @test
     */
    public function checkGettingNeutralRegionFromSpecificRegion()
    {
        $regionInfo = RegionInfo::getInstance('nl-BE');
        $neutral = $regionInfo->getNeutralRegionInfo();
        $this->assertEquals('België', $neutral->getNativeName());
    }

    /**
     * @group Globalisation
     * @group G11N
     * @test
     */
    public function getAllCulturesCountTest()
    {
        $specificCultures = RegionInfo::getSpecificCultures(); //Cultures bound to both a region and language
        $cultures = RegionInfo::getAllCultures(); //All cultures
        $neutralCultures = RegionInfo::getNeutralCultures(); //Cultures not bound to a region. Only a language
        $this->assertNotEquals($cultures->count(), $specificCultures->count());
        $this->assertNotEquals($cultures->count(), $neutralCultures->count());
        $this->assertEquals($cultures->count(), $specificCultures->count() + $neutralCultures->count(), 'The total amount of cultures ('.$cultures->count().') was expected to match the amount of neutral cultures ('.$neutralCultures->count().') plus the specific cultures ('.$specificCultures->count().').');
    }
}