<?php␊ |
␊ |
require_once 'IDF/Scm/Monotone/ZipRender.php';␊ |
require_once 'IDF/Scm/Monotone/IStdio.php';␊ |
␊ |
class ZipRenderStdioMock implements IDF_Scm_Monotone_IStdio␊ |
{␊ |
// unused␊ |
public function __construct(IDF_Project $project) {}␊ |
␊ |
// unused␊ |
public function start() {}␊ |
␊ |
// unused␊ |
public function stop() {}␊ |
␊ |
public function exec(array $args, array $options = array())␊ |
{␊ |
if ($args[0] == 'certs') {␊ |
$basicio =<<<END␊ |
key [0504aea5d3716d31281171aaecf3a7c227e5545b]␊ |
signature "ok"␊ |
name "author"␊ |
value "joe@home"␊ |
trust "trusted"␊ |
␊ |
key [0504aea5d3716d31281171aaecf3a7c227e5545b]␊ |
signature "ok"␊ |
name "branch"␊ |
value "foo"␊ |
trust "trusted"␊ |
␊ |
key [0504aea5d3716d31281171aaecf3a7c227e5545b]␊ |
signature "ok"␊ |
name "changelog"␊ |
value "test"␊ |
trust "trusted"␊ |
␊ |
key [0504aea5d3716d31281171aaecf3a7c227e5545b]␊ |
signature "ok"␊ |
name "date"␊ |
value "2009-07-06T22:06:27"␊ |
trust "trusted"␊ |
␊ |
END;␊ |
return $basicio;␊ |
}␊ |
if ($args[0] == 'get_manifest_of') {␊ |
$basicio =<<<END␊ |
format_version "1"␊ |
␊ |
dir ""␊ |
␊ |
file "foo"␊ |
content [6fcf9dfbd479ed82697fee719b9f8c610a11ff2a]␊ |
␊ |
dir "bar"␊ |
␊ |
file "bar/baz"␊ |
content [9063a9f0e032b6239403b719cbbba56ac4e4e45f]␊ |
␊ |
END;␊ |
return $basicio;␊ |
}␊ |
␊ |
if ($args[0] == 'get_file') {␊ |
if ($args[1] == '6fcf9dfbd479ed82697fee719b9f8c610a11ff2a') {␊ |
return 'This is foo.';␊ |
}␊ |
if ($args[1] == '9063a9f0e032b6239403b719cbbba56ac4e4e45f') {␊ |
return 'This is baz.';␊ |
}␊ |
throw new Exception('unexpected id ' . $args[1]);␊ |
}␊ |
␊ |
throw new Exception('unexpected command ' . $args[0]);␊ |
}␊ |
␊ |
// unused␊ |
public function getLastOutOfBandOutput() {}␊ |
}␊ |
␊ |
class IDF_Scm_Monotone_ZipRenderTest extends PHPUnit_Framework_TestCase␊ |
{␊ |
// we can not test header sending with PHP-CLI, as header() is ignored␊ |
// in this environment␊ |
public function testRender()␊ |
{␊ |
$mock = new ZipRenderStdioMock(new IDF_Project());␊ |
$renderer = new IDF_Scm_Monotone_ZipRender($mock, '97fee719b9f8c610a11ff2a9063a9f0e032b6');␊ |
␊ |
ob_start();␊ |
$renderer->render(true);␊ |
$zipcontents = ob_get_contents();␊ |
ob_end_clean();␊ |
␊ |
// for this version php needs to be compiled with --enable-zip␊ |
if (function_exists('zip_open')) {␊ |
// yes, I'd rather have used php://memory here, but ZipArchive::open()␊ |
// complained that it could not open the stream in question␊ |
$filename = tempnam(Pluf::f('tmp_folder', '/tmp'), __CLASS__.'.');␊ |
file_put_contents($filename, $zipcontents);␊ |
␊ |
$za = new ZipArchive();␊ |
$za->open($filename);␊ |
$this->assertEquals(2, $za->numFiles);␊ |
␊ |
// 2009-07-06T22:06:27 - one second␊ |
// (don't ask me why, seems to be some quirk in zipstream)␊ |
$mtime = 1246910787 - 1;␊ |
␊ |
// foo␊ |
$data = $za->statIndex(0);␊ |
$this->assertEquals('foo', $data['name']);␊ |
$this->assertEquals(12, $data['size']);␊ |
$this->assertEquals($mtime, $data['mtime']);␊ |
␊ |
// bar/baz␊ |
$data = $za->statIndex(1);␊ |
$this->assertEquals('bar/baz', $data['name']);␊ |
$this->assertEquals(12, $data['size']);␊ |
$this->assertEquals($mtime, $data['mtime']);␊ |
␊ |
$za->close();␊ |
unlink($filename);␊ |
}␊ |
else {␊ |
$wrapped_act = wordwrap(␊ |
base64_encode($zipcontents),␊ |
32, "\n", true␊ |
);␊ |
$wrapped_exp = wordwrap(␊ |
base64_encode(file_get_contents(DATADIR . '/' . __CLASS__ . '/data.zip')),␊ |
32, "\n", true␊ |
);␊ |
␊ |
$this->assertEquals($wrapped_exp, $wrapped_act);␊ |
}␊ |
}␊ |
}␊ |