| <?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);␊ |
| }␊ |
| }␊ |
| }␊ |