/**
  * @param string[][][] $fieldsAsMultiDimensionalArrays
  * @param string[] $metadata
  * @param string[] $files
  * @param string $type
  * @param string[] $expectedFile
  * @param string[] $logLevels
  * @dataProvider dictionaryProvider
  */
 public function testSerialize(array $fieldsAsMultiDimensionalArrays, array $metadata, array $files, string $type, array $expectedFile, array $logLevels)
 {
     $expectedFile['bytes'] = $this->stripIndentsAndToCRLF($expectedFile['bytes']);
     $serializer = new InteligenceoSerializer($type);
     $serializer->setLogger($this);
     $dictionary = $this->generateDictionary($fieldsAsMultiDimensionalArrays, $metadata, $files);
     $file = $serializer->serialize($dictionary);
     if ($files) {
         $finfo = new \esperecyan\dictionary_php\fileinfo\Finfo(FILEINFO_MIME_TYPE);
         $archive = $this->generateArchive($file['bytes']);
         for ($i = 0, $l = $archive->numFiles; $i < $l; $i++) {
             $actualTypes[$archive->getNameIndex($i)] = $finfo->buffer($archive->getFromIndex($i));
         }
         $asciiTitle = (new \esperecyan\dictionary_php\validator\FilenameValidator())->convertToValidFilenameWithoutExtensionInArchives($dictionary->getTitle());
         foreach ($files as $filename => $content) {
             $expectedTypes["{$asciiTitle}/{$filename}"] = $finfo->buffer($content);
         }
         $expectedTypes["{$asciiTitle}.txt"] = 'text/plain';
         $this->assertEquals($expectedTypes, $actualTypes);
         $file['bytes'] = $archive->getFromName("{$asciiTitle}.txt");
     }
     $file['bytes'] = mb_convert_encoding($file['bytes'], 'UTF-8', 'Windows-31J');
     $this->assertEquals($expectedFile, $file);
     $this->assertEquals($logLevels, $this->logLevels);
 }
 /**
  * @param string $to
  * @param string[][][] $fieldsAsMultiDimensionalArrays
  * @param string[] $metadata
  * @param string[] $files
  * @param string[] $expectedFile
  * @param string[] $logLevels
  * @param bool $csvOnly
  * @dataProvider dictionaryProvider
  */
 public function testSerialize(string $to, array $fieldsAsMultiDimensionalArrays, array $metadata, array $files, array $expectedFile, array $logLevels, bool $csvOnly = false)
 {
     $dictionary = $this->generateDictionary($fieldsAsMultiDimensionalArrays, $metadata, $files);
     $expectedFile['bytes'] = $this->stripIndentsAndToCRLF($expectedFile['bytes']);
     $serializer = new Serializer($to);
     $serializer->setLogger($this);
     $file = $serializer->serialize($dictionary, $csvOnly);
     if ($to === '汎用辞書' && $files && !$csvOnly) {
         $archive = $this->generateArchive($file['bytes']);
         $finfo = new \esperecyan\dictionary_php\fileinfo\Finfo(FILEINFO_MIME_TYPE);
         for ($i = 0, $l = $archive->numFiles; $i < $l; $i++) {
             $actualTypes[$archive->getNameIndex($i)] = $finfo->buffer($archive->getFromIndex($i));
         }
         $this->assertEquals(array_map(function (string $file) use($finfo) : string {
             return $finfo->buffer($file);
         }, $files + ['dictionary.csv' => $expectedFile['bytes']]), $actualTypes);
         $file['bytes'] = $archive->getFromName('dictionary.csv');
         $this->assertEquals($expectedFile, $file);
     } else {
         if (strpos($expectedFile['type'], 'charset=Shift_JIS') !== false) {
             $file['bytes'] = mb_convert_encoding($file['bytes'], 'UTF-8', 'Windows-31J');
         }
         $this->assertEquals($expectedFile, $file);
     }
     $this->assertEquals($logLevels, $this->logLevels);
 }
 /**
  * @param string[][][] $fieldsAsMultiDimensionalArrays
  * @param string[] $metadata
  * @param string[] $files
  * @param string[] $expectedFile
  * @param string[] $logLevels
  * @dataProvider dictionaryProvider
  */
 public function testSerialize(array $fieldsAsMultiDimensionalArrays, array $metadata, array $files, array $expectedFile, array $logLevels)
 {
     $dictionary = $this->generateDictionary($fieldsAsMultiDimensionalArrays, $metadata, $files);
     $expectedFile['bytes'] = $this->stripIndentsAndToCRLF($expectedFile['bytes']);
     $serializer = new GenericDictionarySerializer();
     $serializer->setLogger($this);
     $file = $serializer->serialize($dictionary);
     if ($files) {
         $archive = $this->generateArchive($file['bytes']);
         $finfo = new \esperecyan\dictionary_php\fileinfo\Finfo(FILEINFO_MIME_TYPE);
         for ($i = 0, $l = $archive->numFiles; $i < $l; $i++) {
             $actualTypes[$archive->getNameIndex($i)] = $finfo->buffer($archive->getFromIndex($i));
         }
         $this->assertEquals(array_map(function (string $file) use($finfo) : string {
             return $finfo->buffer($file);
         }, $files + ['dictionary.csv' => $expectedFile['bytes']]), $actualTypes);
         $file['bytes'] = $archive->getFromName('dictionary.csv');
         $this->assertEquals($expectedFile, $file);
     } else {
         $this->assertEquals($expectedFile, $file);
     }
     $this->assertEquals($logLevels, $this->logLevels);
 }