basic test setup works; added tests for isAvailable(), getBranches(),
getTags(), inTags(), inBranches(), getTree() and isValidRevision()
This commit is contained in:
parent
0ad7f47885
commit
780267978d
@ -28,10 +28,12 @@ require_once("simpletest/autorun.php");
|
|||||||
*/
|
*/
|
||||||
class IDF_Tests_TestMonotone extends UnitTestCase
|
class IDF_Tests_TestMonotone extends UnitTestCase
|
||||||
{
|
{
|
||||||
private $tmpdir, $dbfile;
|
private $tmpdir, $dbfile, $mtnInstance;
|
||||||
|
|
||||||
private function mtnCall($args, $stdin = null, $dir = null)
|
private function mtnCall($args, $stdin = null, $dir = null)
|
||||||
{
|
{
|
||||||
|
// if you have an SSH agent running for key caching,
|
||||||
|
// please disable it
|
||||||
$cmdline = array("mtn",
|
$cmdline = array("mtn",
|
||||||
"--confdir", $this->tmpdir,
|
"--confdir", $this->tmpdir,
|
||||||
"--db", $this->dbfile,
|
"--db", $this->dbfile,
|
||||||
@ -47,10 +49,11 @@ class IDF_Tests_TestMonotone extends UnitTestCase
|
|||||||
);
|
);
|
||||||
|
|
||||||
$pipes = array();
|
$pipes = array();
|
||||||
|
$dir = !empty($dir) ? $dir : $this->tmpdir;
|
||||||
$process = proc_open(implode(" ", $cmdline),
|
$process = proc_open(implode(" ", $cmdline),
|
||||||
$descriptorspec,
|
$descriptorspec,
|
||||||
$pipes,
|
$pipes,
|
||||||
empty($dir) ? $this->tmpdir : $dir);
|
$dir);
|
||||||
|
|
||||||
if (!is_resource($process))
|
if (!is_resource($process))
|
||||||
{
|
{
|
||||||
@ -83,8 +86,15 @@ class IDF_Tests_TestMonotone extends UnitTestCase
|
|||||||
parent::__construct("Test the monotone class.");
|
parent::__construct("Test the monotone class.");
|
||||||
|
|
||||||
$this->tmpdir = sys_get_temp_dir() . "/mtn-test";
|
$this->tmpdir = sys_get_temp_dir() . "/mtn-test";
|
||||||
echo "test root is {$this->tmpdir}\n";
|
|
||||||
$this->dbfile = "{$this->tmpdir}/test.mtn";
|
$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)
|
private static function deleteRecursive($dirname)
|
||||||
@ -127,23 +137,110 @@ class IDF_Tests_TestMonotone extends UnitTestCase
|
|||||||
$workspaceRoot = "{$this->tmpdir}/test-workspace";
|
$workspaceRoot = "{$this->tmpdir}/test-workspace";
|
||||||
mkdir($workspaceRoot);
|
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("add", "foo"), null, $workspaceRoot);
|
||||||
|
|
||||||
$this->mtnCall(array("commit", "-m", "initial"), null, $workspaceRoot);
|
$this->mtnCall(array("commit", "-m", "initial"), null, $workspaceRoot);
|
||||||
|
|
||||||
file_put_contents("$workspaceRoot/foo", "bla");
|
|
||||||
|
|
||||||
file_put_contents("$workspaceRoot/bar", "blafoo");
|
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);
|
$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 testBranches()
|
public function testIsAvailable()
|
||||||
{
|
{
|
||||||
$this->assertTrue(false);
|
$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 testIsValidRevision()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->mtnInstance->isValidRevision("t:release-1.0"));
|
||||||
|
$this->assertFalse($this->mtnInstance->isValidRevision("abcdef12345"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user