working on Comic model

This commit is contained in:
John Bintz 2009-03-14 14:02:13 -04:00
parent 714e1995cd
commit 2e3427f500
3 changed files with 137 additions and 0 deletions

5
lib/ComicException.php Normal file
View File

@ -0,0 +1,5 @@
<?php
class ComicException extends Exception {}
?>

64
model/Comic.php Normal file
View File

@ -0,0 +1,64 @@
<?php
require_once(dirname(__FILE__) . '/../lib/ComicException.php');
class Comic {
public function __construct($info) {
if (!is_array($info)) { throw new ComicException("must be an array"); }
foreach ($info as $key => $value) {
if (is_string($key)) {
switch ($key) {
case "date":
if (!is_numeric($value)) {
if (($value = strtotime($value)) === false) {
throw new ComicException("must be a valid time");
}
}
break;
}
$this->{$key} = $value;
}
}
}
public static function process_directory($directory) {
if (!is_array($directory) && !is_string($directory)) { throw new ComicException("must be an array or a string"); }
$result = array();
$found_entries = array();
if (is_array($directory)) {
foreach ($directory as $filename) {
$base = pathinfo($filename, PATHINFO_FILENAME);
$extension = pathinfo($filename, PATHINFO_EXTENSION);
if (!isset($found_entries[$base])) {
$found_entries[$base] = array();
}
if (($time_result = strtotime($base)) !== false) {
$found_entries[$base]['date'] = $time_result;
}
if (!isset($found_entries[$base]['title'])) {
$found_entries[$base]['title'] = $base;
}
switch ($extension) {
case "txt":
$found_entries[$base]['copy'] = "";
break;
}
}
}
foreach ($found_entries as $entry_info) {
$result[] = new Comic($entry_info);
}
return $result;
}
}
?>

68
test/model/TestComic.php Normal file
View File

@ -0,0 +1,68 @@
<?php
require_once('PHPUnit/Framework.php');
require_once(dirname(__FILE__) . '/../../model/Comic.php');
require_once(dirname(__FILE__) . '/../../lib/ComicException.php');
class TestComic extends PHPUnit_Framework_TestCase {
/**
* @dataProvider directoryListProvider
*/
public function testProcessDirectoryList($entries, $results) {
$this->assertEquals($results, Comic::process_directory($entries));
}
public function directoryListProvider() {
return array(
array(array(), array()),
array(
array("2006-01-01.txt"),
array(new Comic(array('date' => '2006-01-01',
'title' => '2006-01-01',
'copy' => "")))
)
);
}
/**
* @dataProvider badDirectoryInfoProvider
*/
public function testPassBadDirectoryInfo($bad) {
$caught = false;
try {
Comic::process_directory($bad);
} catch (ComicException $e) { $caught = true; }
$this->assertTrue($caught);
}
public function badDirectoryInfoProvider() {
return array(
array(null),
array(false)
);
}
/**
* @dataProvider badConstructorInfoProvider
*/
public function testBadInstantiateComic($bad) {
$caught = false;
try {
$a = new Comic($bad);
} catch (ComicException $e) { $caught = true; }
$this->assertTrue($caught);
}
public function badConstructorInfoProvider() {
return array(
array(null),
array(false),
array("test"),
array(1)
);
}
}
?>