<?php
declare(strict_types=1);

namespace common\tests\unit\validators;

use common\tests\unit\TestCase;
use common\validators\LanguageValidator;

/**
 * @covers \common\validators\LanguageValidator
 */
class LanguageValidatorTest extends TestCase {

    /**
     * @param string $locale
     * @param bool $shouldBeValid
     *
     * @dataProvider getTestCases
     */
    public function testValidate(string $locale, bool $shouldBeValid): void {
        $validator = new LanguageValidator();
        $result = $validator->validate($locale, $error);
        $this->assertSame($shouldBeValid, $result, $locale);
        if (!$shouldBeValid) {
            $this->assertSame($validator->message, $error);
        }
    }

    public function getTestCases(): array {
        return [
            // valid
            ['de', true],
            ['de_DE', true],
            ['deu', true],
            ['en', true],
            ['en_US', true],
            ['fil', true],
            ['fil_PH', true],
            ['zh', true],
            ['zh_Hans_CN', true],
            ['zh_Hant_HK', true],
            // invalid
            ['de_FR', false],
            ['fr_US', false],
            ['foo_bar', false],
            ['foo_bar_baz', false],
        ];
    }

}