2021-03-07 05:58:59 +01:00

183 lines
3.6 KiB
Haxe

package tests;
import sys.FileSystem;
import haxe.io.*;
import haxelib.client.Vcs;
class TestVcsNotFound extends TestBase
{
//----------- properties, fields ------------//
static inline var REPO_ROOT = "test/libraries";
static inline var REPO_DIR = "vcs-no";
static var CWD:String = null;
//--------------- constructor ---------------//
public function new()
{
super();
CWD = Sys.getCwd();
}
//--------------- initialize ----------------//
override public function setup():Void
{
Sys.setCwd(Path.join([CWD, REPO_ROOT]));
if(FileSystem.exists(REPO_DIR)) {
deleteDirectory(REPO_DIR);
}
FileSystem.createDirectory(REPO_DIR);
Sys.setCwd(REPO_DIR);
}
override public function tearDown():Void
{
// restore original CWD & PATH:
Sys.setCwd(CWD);
deleteDirectory(Path.join([CWD, REPO_ROOT, REPO_DIR]));
}
//----------------- tests -------------------//
public function testAvailableHg():Void
{
assertFalse(getHg().available);
}
public function testAvailableGit():Void
{
assertFalse(getGit().available);
}
public function testCloneHg():Void
{
var vcs = getHg();
try
{
vcs.clone(vcs.directory, "https://bitbucket.org/fzzr/hx.signal");
assertFalse(true);
}
catch(error:VcsError)
{
switch(error)
{
case VcsError.CantCloneRepo(_, repo, stderr): assertTrue(true);
default: assertFalse(true);
}
}
}
public function testCloneGit():Void
{
var vcs = getGit();
try
{
vcs.clone(vcs.directory, "https://github.com/fzzr-/hx.signal.git");
assertFalse(true);
}
catch(error:VcsError)
{
switch(error)
{
case VcsError.CantCloneRepo(_, repo, stderr): assertTrue(true);
default: assertFalse(true);
}
}
}
//----------------- tools -------------------//
inline function getHg():Vcs
{
return new WrongHg({quiet: true});
}
inline function getGit():Vcs
{
return new WrongGit({quiet: true});
}
}
class WrongHg extends Mercurial
{
public function new(settings:Settings)
{
super(settings);
this.directory = "no-hg";
this.executable = "no-hg";
this.name = "Mercurial-not-found";
}
// copy of Mercurial.searchExecutablebut have a one change - regexp.
override private function searchExecutable():Void
{
super.searchExecutable();
if(available)
return;
// if we have already msys git/cmd in our PATH
var match = ~/(.*)no-hg-no([\\|\/])cmd$/;
for(path in Sys.getEnv("PATH").split(";"))
{
if(match.match(path.toLowerCase()))
{
var newPath = match.matched(1) + executable + match.matched(2) + "bin";
Sys.putEnv("PATH", Sys.getEnv("PATH") + ";" + newPath);
}
}
checkExecutable();
}
}
class WrongGit extends Git
{
public function new(settings:Settings)
{
super(settings);
this.directory = "no-git";
this.executable = "no-git";
this.name = "Git-not-found";
}
// copy of Mercurial.searchExecutablebut have a one change - regexp.
override private function searchExecutable():Void
{
super.searchExecutable();
if(available)
return;
// if we have already msys git/cmd in our PATH
var match = ~/(.*)no-git-no([\\|\/])cmd$/;
for(path in Sys.getEnv("PATH").split(";"))
{
if(match.match(path.toLowerCase()))
{
var newPath = match.matched(1) + executable + match.matched(2) + "bin";
Sys.putEnv("PATH", Sys.getEnv("PATH") + ";" + newPath);
}
}
if(checkExecutable())
return;
// look at a few default paths
for(path in ["C:\\Program Files (x86)\\Git\\bin", "C:\\Progra~1\\Git\\bin"])
if(FileSystem.exists(path))
{
Sys.putEnv("PATH", Sys.getEnv("PATH") + ";" + path);
if(checkExecutable())
return;
}
}
}