<?php

require_once 'Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php';

class Swift_CharacterReaderFactory_SimpleCharacterReaderFactoryAcceptanceTest
  extends UnitTestCase
{

  private $_factory;
  private $_prefix = 'Swift_CharacterReader_';
  
  public function setUp()
  {
    $this->_factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory();
  }
  
  public function testCreatingUtf8Reader()
  {
    foreach (array('utf8', 'utf-8', 'UTF-8', 'UTF8') as $utf8)
    {
      $reader = $this->_factory->getReaderFor($utf8);
      $this->assertIsA($reader, $this->_prefix . 'Utf8Reader');
    }
  }
  
  public function testCreatingIso8859XReaders()
  {
    $charsets = array();
    foreach (range(1, 16) as $number)
    {
      foreach (array('iso', 'iec') as $body)
      {
        $charsets[] = $body . '-8859-' . $number;
        $charsets[] = $body . '8859-' . $number;
        $charsets[] = strtoupper($body) . '-8859-' . $number;
        $charsets[] = strtoupper($body) . '8859-' . $number;
      }
    }
    
    foreach ($charsets as $charset)
    {
      $reader = $this->_factory->getReaderFor($charset);
      $this->assertIsA($reader, $this->_prefix . 'GenericFixedWidthReader');
      $this->assertEqual(1, $reader->getInitialByteSize());
    }
  }
  
  public function testCreatingWindows125XReaders()
  {
    $charsets = array();
    foreach (range(0, 8) as $number)
    {
      $charsets[] = 'windows-125' . $number;
      $charsets[] = 'windows125' . $number;
      $charsets[] = 'WINDOWS-125' . $number;
      $charsets[] = 'WINDOWS125' . $number;
    }
    
    foreach ($charsets as $charset)
    {
      $reader = $this->_factory->getReaderFor($charset);
      $this->assertIsA($reader, $this->_prefix . 'GenericFixedWidthReader');
      $this->assertEqual(1, $reader->getInitialByteSize());
    }
  }
  
  public function testCreatingCodePageReaders()
  {
    $charsets = array();
    foreach (range(0, 8) as $number)
    {
      $charsets[] = 'cp-125' . $number;
      $charsets[] = 'cp125' . $number;
      $charsets[] = 'CP-125' . $number;
      $charsets[] = 'CP125' . $number;
    }
    
    foreach (array(437, 737, 850, 855, 857, 858, 860,
      861, 863, 865, 866, 869) as $number)
    {
      $charsets[] = 'cp-' . $number;
      $charsets[] = 'cp' . $number;
      $charsets[] = 'CP-' . $number;
      $charsets[] = 'CP' . $number;
    }
    
    foreach ($charsets as $charset)
    {
      $reader = $this->_factory->getReaderFor($charset);
      $this->assertIsA($reader, $this->_prefix . 'GenericFixedWidthReader');
      $this->assertEqual(1, $reader->getInitialByteSize());
    }
  }
  
  public function testCreatingAnsiReader()
  {
    foreach (array('ansi', 'ANSI') as $ansi)
    {
      $reader = $this->_factory->getReaderFor($ansi);
      $this->assertIsA($reader, $this->_prefix . 'GenericFixedWidthReader');
      $this->assertEqual(1, $reader->getInitialByteSize());
    }
  }
  
  public function testCreatingMacintoshReader()
  {
    foreach (array('macintosh', 'MACINTOSH') as $mac)
    {
      $reader = $this->_factory->getReaderFor($mac);
      $this->assertIsA($reader, $this->_prefix . 'GenericFixedWidthReader');
      $this->assertEqual(1, $reader->getInitialByteSize());
    }
  }
  
  public function testCreatingKOIReaders()
  {
    $charsets = array();
    foreach (array('7', '8-r', '8-u', '8u', '8r') as $end)
    {
      $charsets[] = 'koi-' . $end;
      $charsets[] = 'koi' . $end;
      $charsets[] = 'KOI-' . $end;
      $charsets[] = 'KOI' . $end;
    }
    
    foreach ($charsets as $charset)
    {
      $reader = $this->_factory->getReaderFor($charset);
      $this->assertIsA($reader, $this->_prefix . 'GenericFixedWidthReader');
      $this->assertEqual(1, $reader->getInitialByteSize());
    }
  }
  
  public function testCreatingIsciiReaders()
  {
    foreach (array('iscii', 'ISCII', 'viscii', 'VISCII') as $charset)
    {
      $reader = $this->_factory->getReaderFor($charset);
      $this->assertIsA($reader, $this->_prefix . 'GenericFixedWidthReader');
      $this->assertEqual(1, $reader->getInitialByteSize());
    }
  }
  
  public function testCreatingMIKReader()
  {
    foreach (array('mik', 'MIK') as $charset)
    {
      $reader = $this->_factory->getReaderFor($charset);
      $this->assertIsA($reader, $this->_prefix . 'GenericFixedWidthReader');
      $this->assertEqual(1, $reader->getInitialByteSize());
    }
  }
  
  public function testCreatingCorkReader()
  {
    foreach (array('cork', 'CORK', 't1', 'T1') as $charset)
    {
      $reader = $this->_factory->getReaderFor($charset);
      $this->assertIsA($reader, $this->_prefix . 'GenericFixedWidthReader');
      $this->assertEqual(1, $reader->getInitialByteSize());
    }
  }
  
  public function testCreatingUcs2Reader()
  {
    foreach (array('ucs-2', 'UCS-2', 'ucs2', 'UCS2') as $charset)
    {
      $reader = $this->_factory->getReaderFor($charset);
      $this->assertIsA($reader, $this->_prefix . 'GenericFixedWidthReader');
      $this->assertEqual(2, $reader->getInitialByteSize());
    }
  }
  
  public function testCreatingUtf16Reader()
  {
    foreach (array('utf-16', 'UTF-16', 'utf16', 'UTF16') as $charset)
    {
      $reader = $this->_factory->getReaderFor($charset);
      $this->assertIsA($reader, $this->_prefix . 'GenericFixedWidthReader');
      $this->assertEqual(2, $reader->getInitialByteSize());
    }
  }
  
  public function testCreatingUcs4Reader()
  {
    foreach (array('ucs-4', 'UCS-4', 'ucs4', 'UCS4') as $charset)
    {
      $reader = $this->_factory->getReaderFor($charset);
      $this->assertIsA($reader, $this->_prefix . 'GenericFixedWidthReader');
      $this->assertEqual(4, $reader->getInitialByteSize());
    }
  }
  
  public function testCreatingUtf32Reader()
  {
    foreach (array('utf-32', 'UTF-32', 'utf32', 'UTF32') as $charset)
    {
      $reader = $this->_factory->getReaderFor($charset);
      $this->assertIsA($reader, $this->_prefix . 'GenericFixedWidthReader');
      $this->assertEqual(4, $reader->getInitialByteSize());
    }
  }
  
}
