183 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			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;
 | 
						|
			}
 | 
						|
	}
 | 
						|
} |