| */␊ | 
| class IDF_Tests_TestMonotone extends UnitTestCase␊ | 
| {␊ | 
| private $tmpdir, $dbfile;␊ | 
| private $tmpdir, $dbfile, $mtnInstance;␊ | 
| ␊ | 
| private function mtnCall($args, $stdin = null, $dir = null)␊ | 
| {␊ | 
| // if you have an SSH agent running for key caching,␊ | 
| // please disable it␊ | 
| $cmdline = array("mtn",␊ | 
| "--confdir", $this->tmpdir,␊ | 
| "--db", $this->dbfile,␊ | 
|  | 
| );␊ | 
| ␊ | 
| $pipes = array();␊ | 
| $dir = !empty($dir) ? $dir : $this->tmpdir;␊ | 
| $process = proc_open(implode(" ", $cmdline),␊ | 
| $descriptorspec,␊ | 
| $pipes,␊ | 
| empty($dir) ? $this->tmpdir : $dir);␊ | 
| $dir);␊ | 
| ␊ | 
| if (!is_resource($process))␊ | 
| {␊ | 
|  | 
| parent::__construct("Test the monotone class.");␊ | 
| ␊ | 
| $this->tmpdir = sys_get_temp_dir() . "/mtn-test";␊ | 
| echo "test root is {$this->tmpdir}\n";␊ | 
| $this->dbfile = "{$this->tmpdir}/test.mtn";␊ | 
| ␊ | 
| set_include_path(get_include_path() . ":../../../pluf-master/src");␊ | 
| require_once("Pluf.php");␊ | 
| ␊ | 
| Pluf::start(dirname(__FILE__)."/../conf/idf.php");␊ | 
| ␊ | 
| // Pluf::f() mocking␊ | 
| $GLOBALS['_PX_config']['mtn_repositories'] = "{$this->tmpdir}/%s.mtn";␊ | 
| }␊ | 
| ␊ | 
| private static function deleteRecursive($dirname)␊ | 
|  | 
| $workspaceRoot = "{$this->tmpdir}/test-workspace";␊ | 
| mkdir($workspaceRoot);␊ | 
| ␊ | 
| $this->mtnCall(array("setup", "-b", "testbranch", "blafoo"), null, $workspaceRoot);␊ | 
| $this->mtnCall(array("setup", "-b", "testbranch", "."), null, $workspaceRoot);␊ | 
| ␊ | 
| file_put_contents("$workspaceRoot/foo", "blafoo");␊ | 
| file_put_contents("$workspaceRoot/foo", "blubber");␊ | 
| $this->mtnCall(array("add", "foo"), null, $workspaceRoot);␊ | 
| ␊ | 
| $this->mtnCall(array("commit", "-m", "initial"), null, $workspaceRoot);␊ | 
| ␊ | 
| file_put_contents("$workspaceRoot/foo", "bla");␊ | 
| ␊ | 
| file_put_contents("$workspaceRoot/bar", "blafoo");␊ | 
| $this->mtnCall(array("add", "bar"), null, $workspaceRoot);␊ | 
| mkdir("$workspaceRoot/subdir");␊ | 
| file_put_contents("$workspaceRoot/subdir/bla", "blabla");␊ | 
| $this->mtnCall(array("add", "-R", "--unknown"), null, $workspaceRoot);␊ | 
| ␊ | 
| $this->mtnCall(array("commit", "-m", "second"), null, $workspaceRoot);␊ | 
| ␊ | 
| $rev = $this->mtnCall(array("au", "get_base_revision_id"), null, $workspaceRoot);␊ | 
| $this->mtnCall(array("tag", rtrim($rev), "release-1.0"));␊ | 
| ␊ | 
| $project = new IDF_Project();␊ | 
| $project->shortname = "test";␊ | 
| $this->mtnInstance = new IDF_Scm_Monotone($project);␊ | 
| }␊ | 
| ␊ | 
| public function testIsAvailable()␊ | 
| {␊ | 
| $this->assertTrue($this->mtnInstance->isAvailable());␊ | 
| }␊ | 
| ␊ | 
| public function testGetBranches()␊ | 
| {␊ | 
| $branches = $this->mtnInstance->getBranches();␊ | 
| $this->assertEqual(1, count($branches));␊ | 
| list($key, $value) = each($branches);␊ | 
| $this->assertEqual("h:testbranch", $key);␊ | 
| $this->assertEqual("testbranch", $value);␊ | 
| }␊ | 
| ␊ | 
| public function testGetTags()␊ | 
| {␊ | 
| $tags = $this->mtnInstance->getTags();␊ | 
| $this->assertEqual(1, count($tags));␊ | 
| list($key, $value) = each($tags);␊ | 
| $this->assertEqual("t:release-1.0", $key);␊ | 
| $this->assertEqual("release-1.0", $value);␊ | 
| }␊ | 
| ␊ | 
| public function testInBranches()␊ | 
| {␊ | 
| $revOut = $this->mtnCall(array("au", "select", "b:testbranch"));␊ | 
| $revs = preg_split('/\n/', $revOut, -1, PREG_SPLIT_NO_EMPTY);␊ | 
| ␊ | 
| $branches = $this->mtnInstance->inBranches($revs[0], null);␊ | 
| $this->assertEqual(1, count($branches));␊ | 
| $this->assertEqual("h:testbranch", $branches[0]);␊ | 
| ␊ | 
| $branches = $this->mtnInstance->inBranches("t:release-1.0", null);␊ | 
| $this->assertEqual(1, count($branches));␊ | 
| $this->assertEqual("h:testbranch", $branches[0]);␊ | 
| }␊ | 
| ␊ | 
| public function testInTags()␊ | 
| {␊ | 
| $rev = $this->mtnCall(array("au", "select", "t:release-1.0"));␊ | 
| $tags = $this->mtnInstance->inTags(rtrim($rev), null);␊ | 
| $this->assertEqual(1, count($tags));␊ | 
| $this->assertEqual("t:release-1.0", $tags[0]);␊ | 
| ␊ | 
| // pick the first (root) revisions in this database␊ | 
| $rev = $this->mtnCall(array("au", "roots"));␊ | 
| $tags = $this->mtnInstance->inTags(rtrim($rev), null);␊ | 
| $this->assertEqual(0, count($tags));␊ | 
| }␊ | 
| ␊ | 
| public function testGetTree()␊ | 
| {␊ | 
| $files = $this->mtnInstance->getTree("t:release-1.0");␊ | 
| $this->assertEqual(3, count($files));␊ | 
| ␊ | 
| $this->assertEqual("bar", $files[0]->file);␊ | 
| $this->assertEqual("blob", $files[0]->type);␊ | 
| $this->assertEqual(6, $files[0]->size); // "blafoo"␊ | 
| $this->assertEqual("second\n", $files[0]->log);␊ | 
| ␊ | 
| $this->assertEqual("foo", $files[1]->file);␊ | 
| $this->assertEqual("blob", $files[1]->type);␊ | 
| $this->assertEqual(7, $files[1]->size); // "blubber"␊ | 
| $this->assertEqual("initial\n", $files[1]->log);␊ | 
| ␊ | 
| $this->assertEqual("subdir", $files[2]->file);␊ | 
| $this->assertEqual("tree", $files[2]->type);␊ | 
| $this->assertEqual(0, $files[2]->size);␊ | 
| ␊ | 
| $files = $this->mtnInstance->getTree("t:release-1.0", "subdir");␊ | 
| $this->assertEqual(1, count($files));␊ | 
| ␊ | 
| $this->assertEqual("bla", $files[0]->file);␊ | 
| $this->assertEqual("subdir/bla", $files[0]->fullpath);␊ | 
| $this->assertEqual("blob", $files[0]->type);␊ | 
| $this->assertEqual(6, $files[0]->size); // "blabla"␊ | 
| $this->assertEqual("second\n", $files[0]->log);␊ | 
| }␊ | 
| ␊ | 
| public function testBranches()␊ | 
| public function testIsValidRevision()␊ | 
| {␊ | 
| $this->assertTrue(false);␊ | 
| $this->assertTrue($this->mtnInstance->isValidRevision("t:release-1.0"));␊ | 
| $this->assertFalse($this->mtnInstance->isValidRevision("abcdef12345"));␊ | 
| }␊ | 
| }␊ |