diff --git a/src/DataConverter/Encoder/EncoderInterface.php b/src/DataConverter/Encoder/EncoderInterface.php new file mode 100644 index 0000000..ce3b5f7 --- /dev/null +++ b/src/DataConverter/Encoder/EncoderInterface.php @@ -0,0 +1,8 @@ +table = $table; $this->column = $column; + $this->encoder = $encoder; } } diff --git a/src/DataConverter/Field/DBase/CharConverter.php b/src/DataConverter/Field/DBase/CharConverter.php index e057bde..af320fc 100644 --- a/src/DataConverter/Field/DBase/CharConverter.php +++ b/src/DataConverter/Field/DBase/CharConverter.php @@ -15,7 +15,7 @@ public static function getType(): string public function fromBinaryString(string $value) { if ($inCharset = $this->table->options['encoding']) { - $value = iconv($inCharset, 'utf-8', $value); + $value = $this->encoder->encode($value, $inCharset, 'utf-8'); } return trim($value); @@ -24,7 +24,7 @@ public function fromBinaryString(string $value) public function toBinaryString($value): string { if ($value && $outCharset = $this->table->options['encoding']) { - $value = iconv('utf-8', $outCharset, $value); + $value = $this->encoder->encode($value, 'utf-8', $outCharset); } return str_pad($value ?? '', $this->column->length); diff --git a/src/DataConverter/Field/VisualFoxpro/VarFieldConverter.php b/src/DataConverter/Field/VisualFoxpro/VarFieldConverter.php index 716343f..afde00f 100644 --- a/src/DataConverter/Field/VisualFoxpro/VarFieldConverter.php +++ b/src/DataConverter/Field/VisualFoxpro/VarFieldConverter.php @@ -19,7 +19,7 @@ public function fromBinaryString(string $value): string } if ($inCharset = $this->table->options['encoding']) { - $value = iconv($inCharset, 'utf-8', $value); + $value = $this->encoder->encode($value, $inCharset, 'utf-8'); } return $value; @@ -32,7 +32,7 @@ public function toBinaryString($value): string { $value = $value ?? ''; if ($outCharset = $this->table->options['encoding']) { - $value = iconv('utf-8', $outCharset, $value); + $value = $this->encoder->encode($value, 'utf-8', $outCharset); } return str_pad($value, $this->column->length - 1, chr(0x00)).chr(0x03); diff --git a/src/DataConverter/Record/DBaseDataConverter.php b/src/DataConverter/Record/DBaseDataConverter.php index ba30813..fce9aae 100644 --- a/src/DataConverter/Record/DBaseDataConverter.php +++ b/src/DataConverter/Record/DBaseDataConverter.php @@ -2,6 +2,7 @@ namespace XBase\DataConverter\Record; +use XBase\DataConverter\Encoder\EncoderInterface; use XBase\DataConverter\Field\DBase\CharConverter; use XBase\DataConverter\Field\DBase\DateConverter; use XBase\DataConverter\Field\DBase\IgnoreConverter; @@ -20,9 +21,13 @@ class DBaseDataConverter implements RecordDataConverterInterface /** @var Table */ protected $table; - public function __construct(Table $table) + /** @var EncoderInterface */ + protected $encoder; + + public function __construct(Table $table, EncoderInterface $encoder) { $this->table = $table; + $this->encoder = $encoder; } /** @@ -80,7 +85,7 @@ private function findFieldConverter(Column $column): FieldDataConverterInterface { foreach (static::getFieldConverters() as $class) { if ($column->type === $class::getType()) { - return new $class($this->table, $column); + return new $class($this->table, $column, $this->encoder); } } diff --git a/src/Memo/AbstractMemo.php b/src/Memo/AbstractMemo.php index e7618d5..35724fe 100644 --- a/src/Memo/AbstractMemo.php +++ b/src/Memo/AbstractMemo.php @@ -2,6 +2,7 @@ namespace XBase\Memo; +use XBase\DataConverter\Encoder\EncoderInterface; use XBase\Stream\Stream; use XBase\Table\Table; @@ -16,12 +17,16 @@ abstract class AbstractMemo implements MemoInterface /** @var string */ protected $filepath; + /** @var EncoderInterface */ + protected $encoder; + /** * @param string $filepath Path to memo file */ - public function __construct(Table $table, string $filepath) + public function __construct(Table $table, string $filepath, EncoderInterface $encoder) { $this->table = $table; + $this->encoder = $encoder; $this->filepath = $filepath; $this->open(); diff --git a/src/Memo/DBase3Memo.php b/src/Memo/DBase3Memo.php index 1086513..24567d2 100644 --- a/src/Memo/DBase3Memo.php +++ b/src/Memo/DBase3Memo.php @@ -51,7 +51,7 @@ public function get(int $pointer): ?MemoObject $result = substr($result, 0, -1); // remove endline symbol (0x00) } if ($this->table->options['encoding']) { - $result = iconv($this->table->options['encoding'], 'utf-8', $result); + $result = $this->encoder->encode($result, $this->table->options['encoding'], 'utf-8'); } } diff --git a/src/Memo/DBase4Memo.php b/src/Memo/DBase4Memo.php index 354c5eb..6e0086a 100644 --- a/src/Memo/DBase4Memo.php +++ b/src/Memo/DBase4Memo.php @@ -48,7 +48,7 @@ public function get(int $pointer): ?MemoObject $info = $this->guessDataType($result); assert(isset($info['type'])); if (MemoObject::TYPE_TEXT === $info['type'] && $this->table->options['encoding']) { - $result = iconv($this->table->options['encoding'], 'utf-8', $result); + $result = $this->encoder->encode($result, $this->table->options['encoding'], 'utf-8'); } return new MemoObject($result, $info['type'], $pointer, $memoLength[1]); diff --git a/src/Memo/FoxproMemo.php b/src/Memo/FoxproMemo.php index a865bf9..1c97ff7 100644 --- a/src/Memo/FoxproMemo.php +++ b/src/Memo/FoxproMemo.php @@ -56,7 +56,7 @@ public function get(int $pointer): ?MemoObject $info = $this->guessDataType($result); assert(isset($info['type'])); if ($this->table->options['encoding']) { - $result = iconv($this->table->options['encoding'], 'utf-8', $result); + $result = $this->encoder->encode($result, $this->table->options['encoding'], 'utf-8'); } return new MemoObject($result, $info['type'], $pointer, $memoLength[1], $info); diff --git a/src/Memo/MemoFactory.php b/src/Memo/MemoFactory.php index efe1262..66aef2e 100644 --- a/src/Memo/MemoFactory.php +++ b/src/Memo/MemoFactory.php @@ -2,12 +2,13 @@ namespace XBase\Memo; +use XBase\DataConverter\Encoder\EncoderInterface; use XBase\Enum\TableType; use XBase\Table\Table; class MemoFactory { - public static function create(Table $table): ?MemoInterface + public static function create(Table $table, EncoderInterface $encoder): ?MemoInterface { $class = self::getClass($table->getVersion()); $refClass = new \ReflectionClass($class); @@ -26,7 +27,7 @@ public static function create(Table $table): ?MemoInterface return null; //todo create file? } - return $refClass->newInstance($table, $memoFilepath); + return $refClass->newInstance($table, $memoFilepath, $encoder); } private static function getClass(int $version): string diff --git a/src/Record/RecordFactory.php b/src/Record/RecordFactory.php index 546d706..b24299b 100644 --- a/src/Record/RecordFactory.php +++ b/src/Record/RecordFactory.php @@ -2,6 +2,7 @@ namespace XBase\Record; +use XBase\DataConverter\Encoder\EncoderInterface; use XBase\DataConverter\Record\DBase4DataConverter; use XBase\DataConverter\Record\DBase7DataConverter; use XBase\DataConverter\Record\DBaseDataConverter; @@ -13,8 +14,12 @@ class RecordFactory { - public static function create(Table $table, int $recordIndex, ?string $rawData = null): ?RecordInterface - { + public static function create( + Table $table, + EncoderInterface $encoder, + int $recordIndex, + ?string $rawData = null + ): ?RecordInterface { $class = self::getClass($table->getVersion()); $refClass = new \ReflectionClass($class); if (!$refClass->implementsInterface(RecordInterface::class)) { @@ -24,7 +29,7 @@ public static function create(Table $table, int $recordIndex, ?string $rawData = return $refClass->newInstance( $table, $recordIndex, - self::createDataConverter($table)->fromBinaryString($rawData ?? '') + self::createDataConverter($table, $encoder)->fromBinaryString($rawData ?? '') ); } @@ -56,28 +61,28 @@ public static function getClass(int $version): string /** * @return RecordDataConverterInterface */ - public static function createDataConverter(Table $table): RecordDataConverterInterface + public static function createDataConverter(Table $table, EncoderInterface $encoder): RecordDataConverterInterface { switch ($table->getVersion()) { case TableType::DBASE_IV_MEMO: - return new DBase4DataConverter($table); + return new DBase4DataConverter($table, $encoder); case TableType::DBASE_7_NOMEMO: case TableType::DBASE_7_MEMO: - return new DBase7DataConverter($table); + return new DBase7DataConverter($table, $encoder); case TableType::FOXPRO_MEMO: - return new FoxproDataConverter($table); + return new FoxproDataConverter($table, $encoder); case TableType::VISUAL_FOXPRO: case TableType::VISUAL_FOXPRO_AI: case TableType::VISUAL_FOXPRO_VAR: - return new VisualFoxproDataConverter($table); + return new VisualFoxproDataConverter($table, $encoder); case TableType::DBASE_III_PLUS_MEMO: case TableType::DBASE_III_PLUS_NOMEMO: default: - return new DBaseDataConverter($table); + return new DBaseDataConverter($table, $encoder); } } } diff --git a/src/TableCreator.php b/src/TableCreator.php index 63bd967..02b8b2e 100644 --- a/src/TableCreator.php +++ b/src/TableCreator.php @@ -2,6 +2,8 @@ namespace XBase; +use XBase\DataConverter\Encoder\EncoderInterface; +use XBase\DataConverter\Encoder\IconvEncoder; use XBase\Enum\TableType; use XBase\Exception\ColumnException; use XBase\Exception\XBaseException; @@ -20,7 +22,10 @@ class TableCreator { use TableAwareTrait; - public function __construct(string $filepath, Header $header) + /** @var EncoderInterface */ + protected $encoder; + + public function __construct(string $filepath, Header $header, EncoderInterface $encoder = null) { $this->checkFilepath($filepath); $this->checkHeader($header); @@ -29,6 +34,7 @@ public function __construct(string $filepath, Header $header) $this->table->filepath = $filepath; $this->table->header = $header; $this->table->options['create'] = true; + $this->encoder = $encoder ?? new IconvEncoder(); } private function checkFilepath(string $filepath): void @@ -70,7 +76,7 @@ public function save(): self if (TableType::hasMemo($version = $this->getHeader()->version)) { MemoCreatorFactory::create($this->table)->createFile(); - $this->table->memo = MemoFactory::create($this->table); + $this->table->memo = MemoFactory::create($this->table, $this->encoder); } $this->table->stream->close(); diff --git a/src/TableEditor.php b/src/TableEditor.php index 66030db..ce5205f 100644 --- a/src/TableEditor.php +++ b/src/TableEditor.php @@ -92,7 +92,7 @@ public function close(): void public function appendRecord(): RecordInterface { $this->recordPos = $this->getHeader()->recordCount; - $this->record = RecordFactory::create($this->table, $this->recordPos); + $this->record = RecordFactory::create($this->table, $this->encoder, $this->recordPos); $this->insertion = true; return $this->record; @@ -107,7 +107,8 @@ public function writeRecord(RecordInterface $record = null): self $offset = $this->getHeader()->length + ($record->getRecordIndex() * $this->getHeader()->recordByteLength); $this->getStream()->seek($offset); - $this->getStream()->write(RecordFactory::createDataConverter($this->table)->toBinaryString($record)); + $this->getStream()->write(RecordFactory::createDataConverter($this->table, $this->encoder) + ->toBinaryString($record)); if ($this->insertion) { $this->table->header->recordCount++; diff --git a/src/TableReader.php b/src/TableReader.php index 401d0e5..41c70ed 100644 --- a/src/TableReader.php +++ b/src/TableReader.php @@ -4,6 +4,8 @@ use XBase\Column\ColumnInterface; use XBase\Column\XBaseColumn; +use XBase\DataConverter\Encoder\EncoderInterface; +use XBase\DataConverter\Encoder\IconvEncoder; use XBase\Enum\Codepage; use XBase\Enum\TableType; use XBase\Exception\TableException; @@ -36,6 +38,9 @@ class TableReader /** @var RecordInterface|null */ protected $record; + /** @var EncoderInterface */ + protected $encoder; + /** * @var Table */ @@ -47,6 +52,7 @@ class TableReader * @param array $options Array of options:
* encoding - convert text data from
* columns - available columns
+ * encoder - encoder class name, default: IconvEncoder::class
* * @throws \Exception */ @@ -55,6 +61,9 @@ public function __construct(string $filepath, array $options = []) $this->table = new Table(); $this->table->filepath = $filepath; + $this->encoder = isset($options['encoder']) && $options['encoder'] instanceof EncoderInterface ? + $options['encoder'] : + new IconvEncoder(); $this->table->options = $this->resolveOptions($options); $this->open(); @@ -96,7 +105,7 @@ protected function readHeader(): void protected function openMemo(): void { if (TableType::hasMemo($this->getVersion())) { - $this->table->memo = MemoFactory::create($this->table); + $this->table->memo = MemoFactory::create($this->table, $this->encoder); } } @@ -137,7 +146,7 @@ public function nextRecord(): ?RecordInterface } $this->recordPos++; - $this->record = RecordFactory::create($this->table, $this->recordPos, $this->getStream() + $this->record = RecordFactory::create($this->table, $this->encoder, $this->recordPos, $this->getStream() ->read($this->getHeader()->recordByteLength)); if ($this->record->isDeleted()) { @@ -167,7 +176,7 @@ public function pickRecord(int $position): ?RecordInterface throw new TableException("Failed to pick row at position {$position}"); } - $record = RecordFactory::create($this->table, $position, $this->getStream() + $record = RecordFactory::create($this->table, $this->encoder, $position, $this->getStream() ->read($this->getHeader()->recordByteLength)); // revert pointer $this->getStream()->seek($curPos); @@ -197,7 +206,12 @@ public function previousRecord(): ?RecordInterface $this->getStream()->seek($this->getHeader()->length + ($this->recordPos * $this->getHeader()->recordByteLength)); - $this->record = RecordFactory::create($this->table, $this->recordPos, $this->getStream()->read($this->getRecordByteLength())); + $this->record = RecordFactory::create( + $this->table, + $this->encoder, + $this->recordPos, + $this->getStream()->read($this->getRecordByteLength()) + ); if ($this->record->isDeleted()) { $this->deleteCount++; @@ -219,7 +233,7 @@ public function moveTo(int $index): ?RecordInterface $this->getStream()->seek($this->getHeader()->length + ($index * $this->getHeader()->recordByteLength)); - $this->record = RecordFactory::create($this->table, $this->recordPos, $this->getStream() + $this->record = RecordFactory::create($this->table, $this->encoder, $this->recordPos, $this->getStream() ->read($this->getHeader()->recordByteLength)); return $this->record; diff --git a/tests/DataConverter/Field/DBase/NumberConverterTest.php b/tests/DataConverter/Field/DBase/NumberConverterTest.php index c6b3236..e662dc4 100644 --- a/tests/DataConverter/Field/DBase/NumberConverterTest.php +++ b/tests/DataConverter/Field/DBase/NumberConverterTest.php @@ -3,6 +3,7 @@ namespace XBase\Tests\DataConverter\Field\DBase; use PHPUnit\Framework\TestCase; +use XBase\DataConverter\Encoder\IconvEncoder; use XBase\DataConverter\Field\DBase\NumberConverter; use XBase\Header\Column; use XBase\Table\Table; @@ -29,7 +30,7 @@ public function testRightDecimalCount(int $length, int $decimalCount, $in, strin $column->length = $length; $column->decimalCount = $decimalCount; - $fieldConverter = new NumberConverter($table, $column); + $fieldConverter = new NumberConverter($table, $column, new IconvEncoder()); self::assertSame($out, $fieldConverter->toBinaryString($in)); } diff --git a/tests/DataConverter/Field/DBase7/DoubleConverterTest.php b/tests/DataConverter/Field/DBase7/DoubleConverterTest.php index 877edb6..e2cc531 100644 --- a/tests/DataConverter/Field/DBase7/DoubleConverterTest.php +++ b/tests/DataConverter/Field/DBase7/DoubleConverterTest.php @@ -3,6 +3,7 @@ namespace XBase\Tests\Record\DataConverter\Field\DBase7; use PHPUnit\Framework\TestCase; +use XBase\DataConverter\Encoder\IconvEncoder; use XBase\DataConverter\Field\DBase7\DoubleConverter; use XBase\Header\Column; use XBase\Table\Table; @@ -16,7 +17,7 @@ public function test(string $binaryString, float $float): void { $table = new Table(); $column = new Column(); - $converter = new DoubleConverter($table, $column); + $converter = new DoubleConverter($table, $column, new IconvEncoder()); self::assertSame($float, $converter->fromBinaryString($binaryString)); self::assertEquals($float, unpack('E', $converter->toBinaryString($float))[1]); } diff --git a/tests/DataConverter/Field/DBase7/IntegerConverterTest.php b/tests/DataConverter/Field/DBase7/IntegerConverterTest.php index 3fb7b12..ecaec62 100644 --- a/tests/DataConverter/Field/DBase7/IntegerConverterTest.php +++ b/tests/DataConverter/Field/DBase7/IntegerConverterTest.php @@ -3,6 +3,7 @@ namespace XBase\Tests\Record\DataConverter\Field\DBase7; use PHPUnit\Framework\TestCase; +use XBase\DataConverter\Encoder\IconvEncoder; use XBase\DataConverter\Field\DBase7\IntegerConverter; use XBase\Header\Column; use XBase\Table\Table; @@ -16,7 +17,7 @@ public function test(string $binaryString, int $int): void { $table = new Table(); $column = new Column(); - $converter = new IntegerConverter($table, $column); + $converter = new IntegerConverter($table, $column, new IconvEncoder()); self::assertSame($int, $converter->fromBinaryString($binaryString)); self::assertEquals(unpack('C*', $binaryString), unpack('C*', $converter->toBinaryString($int))); } diff --git a/tests/DataConverter/Field/DBase7/TimestampConverterTest.php b/tests/DataConverter/Field/DBase7/TimestampConverterTest.php index c752501..d8c335c 100644 --- a/tests/DataConverter/Field/DBase7/TimestampConverterTest.php +++ b/tests/DataConverter/Field/DBase7/TimestampConverterTest.php @@ -3,6 +3,7 @@ namespace XBase\Tests\Record\DataConverter\Field\DBase7; use PHPUnit\Framework\TestCase; +use XBase\DataConverter\Encoder\IconvEncoder; use XBase\DataConverter\Field\DBase7\TimestampConverter; use XBase\Header\Column; use XBase\Table\Table; @@ -21,7 +22,7 @@ public function test(string $binaryString, int $int): void { $table = new Table(); $column = new Column(); - $converter = new TimestampConverter($table, $column); + $converter = new TimestampConverter($table, $column, new IconvEncoder()); self::assertSame($int, $converter->fromBinaryString($binaryString)); self::assertEquals(base64_encode($binaryString), base64_encode($converter->toBinaryString($int))); } diff --git a/tests/DataConverter/Field/VisualFoxpro/DateTimeConverterTest.php b/tests/DataConverter/Field/VisualFoxpro/DateTimeConverterTest.php index 36c75b2..29e4333 100644 --- a/tests/DataConverter/Field/VisualFoxpro/DateTimeConverterTest.php +++ b/tests/DataConverter/Field/VisualFoxpro/DateTimeConverterTest.php @@ -3,6 +3,7 @@ namespace XBase\Tests\Record\DataConverter\Field\VisualFoxpro; use PHPUnit\Framework\TestCase; +use XBase\DataConverter\Encoder\IconvEncoder; use XBase\DataConverter\Field\VisualFoxpro\DateTimeConverter; use XBase\Header\Column; use XBase\Table\Table; @@ -24,7 +25,7 @@ public function test(string $dtSting): void $table = new Table(); $column = new Column(); - $converter = new DateTimeConverter($table, $column); + $converter = new DateTimeConverter($table, $column, new IconvEncoder()); $binaryString = $converter->toBinaryString(\DateTime::createFromFormat('Y-m-d\TH:i:s.uP', $dtSting)); $dt = $converter->fromBinaryString($binaryString); self::assertInstanceOf(\DateTimeInterface::class, $dt); @@ -50,7 +51,7 @@ public function testFromBinaryStringNull(string $base64Value): void { $table = new Table(); $column = new Column(); - $converter = new DateTimeConverter($table, $column); + $converter = new DateTimeConverter($table, $column, new IconvEncoder()); self::assertNull($converter->fromBinaryString(base64_decode($base64Value))); } diff --git a/tests/DataConverter/Record/DBase7DataConverterTest.php b/tests/DataConverter/Record/DBase7DataConverterTest.php index bcd09bb..dfb205b 100644 --- a/tests/DataConverter/Record/DBase7DataConverterTest.php +++ b/tests/DataConverter/Record/DBase7DataConverterTest.php @@ -3,6 +3,7 @@ namespace XBase\Tests\DataConverter\Record; use PHPUnit\Framework\TestCase; +use XBase\DataConverter\Encoder\IconvEncoder; use XBase\DataConverter\Record\DBase7DataConverter; use XBase\Enum\FieldType; use XBase\Enum\TableType; @@ -107,7 +108,7 @@ public function test(string $rawData): void $table->header->columns = $columns; $table->header->recordByteLength = 126; - $converter = new DBase7DataConverter($table); + $converter = new DBase7DataConverter($table, new IconvEncoder()); $array = $converter->fromBinaryString($rawData); $binaryString = $converter->toBinaryString(new DBase7Record($table, 1, $array)); self::assertSame($rawData, $binaryString); diff --git a/tests/DataConverter/Record/DBaseDataConverterTest.php b/tests/DataConverter/Record/DBaseDataConverterTest.php index 9feef6d..4372227 100644 --- a/tests/DataConverter/Record/DBaseDataConverterTest.php +++ b/tests/DataConverter/Record/DBaseDataConverterTest.php @@ -3,6 +3,7 @@ namespace XBase\Tests\DataConverter\Record; use PHPUnit\Framework\TestCase; +use XBase\DataConverter\Encoder\IconvEncoder; use XBase\DataConverter\Record\DBaseDataConverter; use XBase\Enum\FieldType; use XBase\Enum\TableType; @@ -69,7 +70,7 @@ public function testFromBinaryString(): void $table->header->columns = $columns; $table->header->recordByteLength = 70; - $converter = new DBaseDataConverter($table); + $converter = new DBaseDataConverter($table, new IconvEncoder()); $rawData = base64_decode($base64RowData); $array = $converter->fromBinaryString($rawData); self::assertNotEmpty($array); diff --git a/tests/DataConverter/Record/DBaseRecordTest.php b/tests/DataConverter/Record/DBaseRecordTest.php index 3ca2f4b..81928a8 100644 --- a/tests/DataConverter/Record/DBaseRecordTest.php +++ b/tests/DataConverter/Record/DBaseRecordTest.php @@ -3,6 +3,7 @@ namespace XBase\Tests\Record; use PHPUnit\Framework\TestCase; +use XBase\DataConverter\Encoder\IconvEncoder; use XBase\DataConverter\Record\DBaseDataConverter; use XBase\Enum\FieldType; use XBase\Enum\TableType; @@ -88,7 +89,7 @@ public function testCopyFrom(): void $table->header->recordByteLength = 70; $table->memo = $memo; - $converter = new DBaseDataConverter($table); + $converter = new DBaseDataConverter($table, new IconvEncoder()); $record1 = new DBaseRecord($table, 1, $converter->fromBinaryString('')); $record1 diff --git a/tests/DataConverter/Record/FoxproDataConverterTest.php b/tests/DataConverter/Record/FoxproDataConverterTest.php index 0f071ed..5e38ccb 100644 --- a/tests/DataConverter/Record/FoxproDataConverterTest.php +++ b/tests/DataConverter/Record/FoxproDataConverterTest.php @@ -3,6 +3,7 @@ namespace XBase\Tests\DataConverter\Record; use PHPUnit\Framework\TestCase; +use XBase\DataConverter\Encoder\IconvEncoder; use XBase\DataConverter\Record\FoxproDataConverter; use XBase\Enum\FieldType; use XBase\Enum\TableType; @@ -83,7 +84,7 @@ public function test(string $rawData): void $table->header->columns = $columns; $table->header->recordByteLength = 90; - $converter = new FoxproDataConverter($table); + $converter = new FoxproDataConverter($table, new IconvEncoder()); $array = $converter->fromBinaryString($rawData); $binaryString = $converter->toBinaryString(new FoxproRecord($table, 1, $array)); self::assertSame($rawData, $binaryString); diff --git a/tests/DataConverter/Record/VisualFoxproDataConverterTest.php b/tests/DataConverter/Record/VisualFoxproDataConverterTest.php index 89c0495..f6e644c 100644 --- a/tests/DataConverter/Record/VisualFoxproDataConverterTest.php +++ b/tests/DataConverter/Record/VisualFoxproDataConverterTest.php @@ -3,6 +3,7 @@ namespace XBase\Tests\DataConverter\Record; use PHPUnit\Framework\TestCase; +use XBase\DataConverter\Encoder\IconvEncoder; use XBase\DataConverter\Record\VisualFoxproDataConverter; use XBase\Enum\FieldType; use XBase\Header\Column; @@ -154,7 +155,7 @@ public function test(string $rawData): void $table->header->columns = $columns; $table->header->recordByteLength = 164; - $converter = new VisualFoxproDataConverter($table); + $converter = new VisualFoxproDataConverter($table, new IconvEncoder()); $array = $converter->fromBinaryString($rawData); $binaryString = $converter->toBinaryString(new VisualFoxproRecord($table, 1, $array)); self::assertSame($rawData, $binaryString);