Skip to content

Commit e158067

Browse files
committed
fix: allow to add multiple single files to the same unit-type (pimlie#16)
* add unittest for pimlie#15 * add fix for pimlie#15 * fix static/shared state between tests
1 parent 0ab2ac1 commit e158067

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

src/Map.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ public static function load()
8888
*/
8989
protected static function loadPath($path, $namespace = '', $unitType = '')
9090
{
91+
$classes = [];
92+
9193
if (is_file($path)) {
9294
$classes = self::loadFile($path, $namespace);
9395

@@ -98,7 +100,7 @@ protected static function loadPath($path, $namespace = '', $unitType = '')
98100
$classes = self::loadDirectory($path, $namespace);
99101
}
100102

101-
self::$map = self::$map + $classes;
103+
self::$map = array_merge_recursive(self::$map, $classes);
102104

103105
return count($classes) > 0;
104106
}

tests/UnitTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
use PHPUnit\Framework\TestCase;
55
use PhpUnitConversion\Exception;
6+
use PhpUnitConversion\Map\Factor;
67
use PhpUnitConversion\Unit;
78
use PhpUnitConversion\Map as UnitMap;
89
use PhpUnitConversion\Unit\Mass;
@@ -184,4 +185,29 @@ public function testNearestInteger()
184185

185186
$this->assertInstanceOf(Mass\Gram::class, $unit);
186187
}
188+
189+
public function testMultipleCustomUnits()
190+
{
191+
UnitMap::clear();
192+
UnitMap::add(__DIR__ . '/../src/Unit/Length/Meter.php', 'PhpUnitConversion\\Unit\\Length', Unit\Length::class);
193+
UnitMap::add(__DIR__ . '/../src/Unit/Length/CentiMeter.php', 'PhpUnitConversion\\Unit\\Length', Unit\Length::class);
194+
195+
UnitMap::add(__DIR__ . '/../src/Unit/Mass/KiloGram.php', 'PhpUnitConversion\\Unit\\Mass', Unit\Mass::class);
196+
UnitMap::add(__DIR__ . '/../src/Unit/Mass/Gram.php', 'PhpUnitConversion\\Unit\\Mass', Unit\Mass::class);
197+
198+
$lengthUnits = Factor::byType(Unit\Length::TYPE);
199+
$this->assertCount(2, $lengthUnits);
200+
$this->assertArrayHasKey(Unit\Length\CentiMeter::class, $lengthUnits);
201+
$this->assertArrayHasKey(Unit\Length\Meter::class, $lengthUnits);
202+
$this->assertSame(Unit\Length\CentiMeter::FACTOR, $lengthUnits[Unit\Length\CentiMeter::class]);
203+
$this->assertSame(1, $lengthUnits[Unit\Length\Meter::class]);
204+
205+
$lengthUnits = Factor::byType(Unit\Mass::TYPE);
206+
$this->assertCount(2, $lengthUnits);
207+
$this->assertArrayHasKey(Unit\Mass\KiloGram::class, $lengthUnits);
208+
$this->assertArrayHasKey(Unit\Mass\Gram::class, $lengthUnits);
209+
$this->assertSame(Unit\Mass\KiloGram::FACTOR, $lengthUnits[Unit\Mass\KiloGram::class]);
210+
$this->assertSame(1, $lengthUnits[Unit\Mass\Gram::class]);
211+
UnitMap::add(__DIR__.'/../src/Unit', 'PhpUnitConversion\\Unit', null);
212+
}
187213
}

0 commit comments

Comments
 (0)