<?php
/**
* Dec2RomanNumConverter
*
* Copyright (C) 2009 Nikola Posa (http://www.nikolaposa.in.rs)
*
* This file is part of Dec2RomanNumConverter.
*
* Dec2RomanNumConverter is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Dec2RomanNumConverter is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Dec2RomanNumConverter. If not, see <http://www.gnu.org/licenses/>.
*/
require_once dirname(__FILE__) . '/TestHelper.php';
require_once 'Dec2RomanNumConverter.php';
/**
* Dec2RomanNumConverter tests.
*
* @author Nikola Posa <posa.nikola@gmail.com>
* @license http://opensource.org/licenses/gpl-3.0.html GNU General Public License
*/
class Dec2RomanNumConverterTest extends PHPUnit_Framework_TestCase
{
public function testDec2RomanMethodExceptionShouldBeThrownInCaseNumberLargerThan3999IsPassed()
{
try {
Dec2RomanNumConverter::dec2roman(7000);
$this->fail();
}
catch (Exception $e) {
$this->assertType('Dec2RomanNumConverter_Exception', $e);
$this->assertRegexp('/larger than 3999/i', $e->getMessage());
}
}
public function testDec2RomanMethod()
{
$valuesExpected = array(
10 => 'X',
23 => 'XXIII',
277 => 'CCLXXVII',
1987 => 'MCMLXXXVII',
2010 => 'MMX',
3024 => 'MMMXXIV',
1573 => 'MDLXXIII',
1234 => 'MCCXXXIV',
'732' => 'DCCXXXII',
false => '',
0 => '',
true => 'I',
'37foo' => 'XXXVII'
);
foreach ($valuesExpected as $input => $output) {
$this->assertEquals($output, Dec2RomanNumConverter::dec2roman($input));
}
}
public function testRoman2DecMethodShouldThrowExceptionForInvalidNumeral()
{
try {
Dec2RomanNumConverter::roman2dec('XIfoo');
$this->fail();
}
catch (Exception $e) {
$this->assertType('Dec2RomanNumConverter_Exception', $e);
$this->assertRegexp('/is not valid or it is to large/i', $e->getMessage());
}
}
public function testRoman2DecMethod()
{
$valuesExpected = array(
'MCMLXXXVII' => 1987,
'MMX' => 2010,
'mmmxxiv' => 3024,
'XXIII' => 23,
'CCLXXVII' => 277,
'MDLXXIII' => 1573,
'IIX' => 8, //invalid markup, but it should be handled correctly
'DCCXXIX' => 729,
'dcccxc' => 890
);
foreach ($valuesExpected as $input => $output) {
$this->assertEquals($output, Dec2RomanNumConverter::roman2dec($input));
}
}
}
|