Skip to content
This repository has been archived by the owner on Jul 28, 2024. It is now read-only.

Commit

Permalink
#588 fixed PHP_BINARY path, and tests refactor.
Browse files Browse the repository at this point in the history
  • Loading branch information
octopuss committed Feb 17, 2016
1 parent 22b5531 commit 5b2b1b2
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 53 deletions.
4 changes: 2 additions & 2 deletions plugins/versionpress/src/Git/MergeDriverInstaller.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ public static function installGitMergeDriver($directory) {
$mergeDriverScript = VERSIONPRESS_PLUGIN_DIR . '/src/Git/MergeDrivers/ini-merge.php';

$gitconfigVariables = array(
'merge-driver-script' => $mergeDriverScript,
'php-binary-path' => PHP_BINDIR . '/php'
'merge-driver-script' => '"' . str_replace('\\', '/', $mergeDriverScript) . '"',
'php-binary-path' => '"' . str_replace('\\', '/', PHP_BINARY) . '"'
);

$gitconfig = StringUtils::fillTemplateString($gitconfigVariables, $gitconfig);
Expand Down
78 changes: 27 additions & 51 deletions plugins/versionpress/tests/GitRepositoryTests/MergeDriverTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use VersionPress\Git\GitConfig;
use VersionPress\Git\GitRepository;
use VersionPress\Git\MergeDriverInstaller;
use VersionPress\Tests\Utils\MergeDriverTestUtils;
use VersionPress\Utils\FileSystem;
use VersionPress\Utils\IniSerializer;
use VersionPress\Utils\Process;
Expand Down Expand Up @@ -41,12 +42,21 @@ public static function setUpBeforeClass() {

}

public function setUp() {
MergeDriverTestUtils::initRepository(self::$repositoryDir);
}

public function tearDown() {
MergeDriverTestUtils::destroyRepository();
}



public static function tearDownAfterClass() {
self::destroyRepository();
}

static function initRepository($installMergeDriver = false) {
static function initRepository() {
$driverScriptName = 'ini-merge.php';
$driverScript = '../../src/Git/MergeDrivers/' . $driverScriptName;
$driverScriptFakeDir = self::$repositoryDir . '/src/Git/MergeDrivers';
Expand All @@ -56,17 +66,6 @@ static function initRepository($installMergeDriver = false) {
self::$gitRepository = new GitRepository(self::$repositoryDir, __DIR__);
self::$gitRepository->init();
copy($driverScript, $driverScriptFakeDir . '/' . $driverScriptName);
if ($installMergeDriver) {
MergeDriverInstaller::installGitattributes(self::$initializationDir);
MergeDriverInstaller::installGitMergeDriver(self::$initializationDir);
}
}


private static function doInRepository($callback, $installMergeDriver = false) {
self::initRepository($installMergeDriver);
$callback();
self::destroyRepository();
}


Expand All @@ -78,80 +77,57 @@ static function destroyRepository() {
* @test
*/
public function isGitAttributesSetTest() {
self::doInRepository(function () {
MergeDriverInstaller::installGitattributes(self::$initializationDir);
$this->assertContains('merge=vp-ini', file_get_contents(self::$repositoryDir . "/.gitattributes"));
});

}

/**
* @test
*/
public function isMergeDriverInstalledTest() {
self::doInRepository(function () {
MergeDriverInstaller::installGitMergeDriver(self::$initializationDir);
$this->assertContains('vp-ini', file_get_contents(self::$repositoryDir . "/.git/config"));
});
}

/**
* @test
*/
public function isMergedWithoutConflictTest() {

self::doInRepository(function () {
$this->fillFakeFileAndCommit(ORIGIN_DATE, 'Initial commit to Ancestor');
MergeDriverTestUtils::installMergeDriver(self::$initializationDir);

MergeDriverTestUtils::fillFakeFileAndCommit(ORIGIN_DATE, 'Initial commit to Ancestor');

MergeDriverTestUtils::runProcess(CHECKOUT_BRANCH_CMD);
MergeDriverTestUtils::fillFakeFileAndCommit(BRANCH_DATE, 'Commit to branch');

$this->runProcess(CHECKOUT_BRANCH_CMD);
$this->fillFakeFileAndCommit(BRANCH_DATE, 'Commit to branch');
MergeDriverTestUtils::runProcess(CHECKOUT_MASTER_CMD);
MergeDriverTestUtils::fillFakeFileAndCommit(MASTER_DATE, 'Commit to master');

$this->runProcess(CHECKOUT_MASTER_CMD);
$this->fillFakeFileAndCommit(MASTER_DATE, 'Commit to master');
$this->assertEquals(0, MergeDriverTestUtils::runProcess(MERGE_CMD));

$this->assertEquals(0, $this->runProcess(MERGE_CMD));
}, true);
}

/**
* @test
*/
public function isMergedWithoutConflictInDateTest() {

self::doInRepository(function () {
MergeDriverTestUtils::installMergeDriver(self::$initializationDir);

$this->fillFakeFileAndCommit(ORIGIN_DATE, 'Initial commit to Ancestor');
MergeDriverTestUtils::fillFakeFileAndCommit(ORIGIN_DATE, 'Initial commit to Ancestor');

$this->runProcess(CHECKOUT_BRANCH_CMD);
$this->fillFakeFileAndCommit(BRANCH_DATE, 'Commit to branch', 'Custom branch message');
MergeDriverTestUtils::runProcess(CHECKOUT_BRANCH_CMD);
MergeDriverTestUtils::fillFakeFileAndCommit(BRANCH_DATE, 'Commit to branch', 'Custom branch message');

$this->runProcess(CHECKOUT_MASTER_CMD);
$this->fillFakeFileAndCommit(MASTER_DATE, 'Commit to master');
MergeDriverTestUtils::runProcess(CHECKOUT_MASTER_CMD);
MergeDriverTestUtils::fillFakeFileAndCommit(MASTER_DATE, 'Commit to master');

$this->assertEquals(1, $this->runProcess(MERGE_CMD));
$this->assertEquals(1, MergeDriverTestUtils::runProcess(MERGE_CMD));
$expected = file_get_contents(__DIR__ . '/expected-merge-conflict.ini');
$file = file_get_contents(self::$repositoryDir . '/file.ini');
$this->assertEquals($expected, $file);

}, true);
}


private function fillFakeFileAndCommit($originDate, $message = 'Fake commit message', $content = 'Fake content') {
$originData = array("GUID" => array('post_modified' => $originDate, 'post_modified_gmt' => $originDate, 'content' => $content));
file_put_contents(self::$repositoryDir . '/file.ini', IniSerializer::serialize($originData));
self::$gitRepository->stageAll();
self::$gitRepository->commit($message, GitConfig::$wpcliUserName, GitConfig::$wpcliUserEmail);
}

/**
* @param $checkoutBranchCmd
* @return Process
*/
private function runProcess($checkoutBranchCmd) {
$process = new Process($checkoutBranchCmd, self::$repositoryDir);
$process->run();
return $process->getExitCode();
}


Expand Down
63 changes: 63 additions & 0 deletions plugins/versionpress/tests/Utils/MergeDriverTestUtils.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?php

namespace VersionPress\Tests\Utils;

use VersionPress\Git\GitConfig;
use VersionPress\Git\GitRepository;
use VersionPress\Git\MergeDriverInstaller;
use VersionPress\Utils\FileSystem;
use VersionPress\Utils\IniSerializer;
use VersionPress\Utils\Process;

class MergeDriverTestUtils {

private static $repositoryDir;

/**
* @var GitRepository
*/
private static $gitRepository;

public static function initRepository($repositoryDir) {
self::$repositoryDir = $repositoryDir;
$driverScriptName = 'ini-merge.php';
$driverScript = '../../src/Git/MergeDrivers/' . $driverScriptName;
$driverScriptFakeDir = self::$repositoryDir . '/src/Git/MergeDrivers';
FileSystem::remove(self::$repositoryDir);
mkdir(self::$repositoryDir);
FileSystem::mkdir($driverScriptFakeDir);
self::$gitRepository = new GitRepository(self::$repositoryDir, __DIR__);
self::$gitRepository->init();
copy($driverScript, $driverScriptFakeDir . '/' . $driverScriptName);

}


public static function destroyRepository() {
FileSystem::remove(self::$repositoryDir);
}

public static function fillFakeFileAndCommit($originDate, $message = 'Fake commit message', $content = 'Fake content') {
$originData = array("GUID" => array('post_modified' => $originDate, 'post_modified_gmt' => $originDate, 'content' => $content));
file_put_contents(self::$repositoryDir . '/file.ini', IniSerializer::serialize($originData));
self::$gitRepository->stageAll();
self::$gitRepository->commit($message, GitConfig::$wpcliUserName, GitConfig::$wpcliUserEmail);
}

/**
* @param $checkoutBranchCmd
* @return Process
*/
public static function runProcess($checkoutBranchCmd) {
$process = new Process($checkoutBranchCmd, self::$repositoryDir);
$process->run();
return $process->getExitCode();
}

public static function installMergeDriver($initializationDir) {
MergeDriverInstaller::installGitattributes($initializationDir);
MergeDriverInstaller::installGitMergeDriver($initializationDir);
}


}

0 comments on commit 5b2b1b2

Please sign in to comment.