J. King
4 years ago
3 changed files with 59 additions and 1 deletions
@ -0,0 +1,56 @@ |
|||||
|
<?php |
||||
|
/** @license MIT |
||||
|
* Copyright 2018 J. King et al. |
||||
|
* See LICENSE and AUTHORS files for details */ |
||||
|
|
||||
|
declare(strict_types=1); |
||||
|
namespace MensBeam\Intl\TestCase; |
||||
|
|
||||
|
use MensBeam\Intl\Encoding; |
||||
|
|
||||
|
class TestEncoding extends \PHPUnit\Framework\TestCase { |
||||
|
/** @dataProvider provideLabelData */ |
||||
|
public function testMatchALabelToAnEncoding(string $label, array $exp) { |
||||
|
$this->assertSame($exp, Encoding::matchLabel($label)); |
||||
|
$this->assertSame($exp, Encoding::matchLabel(strtoupper($label))); |
||||
|
$this->assertSame($exp, Encoding::matchLabel(" $label\n\n\r\t")); |
||||
|
} |
||||
|
|
||||
|
public function testFailToMatchALabelToAnEncoding() { |
||||
|
$this->assertNull(Encoding::matchLabel("Not a label")); |
||||
|
} |
||||
|
|
||||
|
/** @dataProvider provideLabelData */ |
||||
|
public function testCreateADecoderFromALabel(string $label, array $data) { |
||||
|
$this->assertInstanceOf($data['class'], Encoding::createDecoder($label, "")); |
||||
|
$this->assertInstanceOf($data['class'], Encoding::createDecoder(strtoupper($label), "")); |
||||
|
$this->assertInstanceOf($data['class'], Encoding::createDecoder(" $label\n\n\r\t", "")); |
||||
|
} |
||||
|
|
||||
|
public function testFailToCreateADecoderFromALabel() { |
||||
|
$this->assertNull(Encoding::createDecoder("Not a label", "")); |
||||
|
} |
||||
|
|
||||
|
public function provideLabelData() { |
||||
|
$ns = "MensBeam\\Intl\\Encoding\\"; |
||||
|
$labels = []; |
||||
|
$names = []; |
||||
|
foreach (new \GlobIterator(\MensBeam\Intl\BASE."/lib/Encoding/*.php", \FilesystemIterator::CURRENT_AS_PATHNAME) as $file) { |
||||
|
$file = basename($file, ".php"); |
||||
|
$className = $ns.$file; |
||||
|
$class = new \ReflectionClass($className); |
||||
|
if ($class->implementsInterface(\MensBeam\Intl\Encoding\Encoding::class) && $class->isInstantiable()) { |
||||
|
$name = $class->getConstant("NAME"); |
||||
|
$names[$name] = $className; |
||||
|
foreach ($class->getConstant("LABELS") as $label) { |
||||
|
$labels[$label] = $name; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
$out = []; |
||||
|
foreach ($labels as $label => $name) { |
||||
|
$out[] = [(string) $label, ['label' => (string) $label, 'name' => $name, 'class' => $names[$name]]]; |
||||
|
} |
||||
|
return $out; |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue