247 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			247 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
package tests;
 | 
						|
 | 
						|
import sys.io.*;
 | 
						|
import sys.FileSystem;
 | 
						|
import haxe.io.*;
 | 
						|
import haxe.unit.TestCase;
 | 
						|
 | 
						|
import haxelib.client.Cli;
 | 
						|
import haxelib.client.Vcs;
 | 
						|
 | 
						|
class TestVcs extends TestBase
 | 
						|
{
 | 
						|
	//----------- properties, fields ------------//
 | 
						|
 | 
						|
	static inline var REPO_ROOT = "test/libraries";
 | 
						|
	static inline var REPO_DIR = "vcs";
 | 
						|
	static var CWD:String = null;
 | 
						|
 | 
						|
	var id:VcsID = null;
 | 
						|
	var vcsName:String = null;
 | 
						|
	var url:String = null;
 | 
						|
	var rev:String = null;
 | 
						|
	var counter:Int = 0;
 | 
						|
 | 
						|
	//--------------- constructor ---------------//
 | 
						|
 | 
						|
	public function new(id:VcsID, vcsName:String, url:String, ?rev:String)
 | 
						|
	{
 | 
						|
		super();
 | 
						|
		this.id = id;
 | 
						|
		this.url = url;
 | 
						|
		this.rev = rev;
 | 
						|
		this.vcsName = vcsName;
 | 
						|
 | 
						|
		CWD = Sys.getCwd();
 | 
						|
		counter = 0;
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	//--------------- 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:
 | 
						|
		Sys.setCwd(CWD);
 | 
						|
 | 
						|
		deleteDirectory(Path.join([CWD, REPO_ROOT, REPO_DIR]));
 | 
						|
	}
 | 
						|
 | 
						|
	//----------------- tests -------------------//
 | 
						|
 | 
						|
 | 
						|
	public function testGetVcs():Void
 | 
						|
	{
 | 
						|
		assertTrue(Vcs.get(id, {quiet: true}) != null);
 | 
						|
		assertTrue(Vcs.get(id, {quiet: true}).name == vcsName);
 | 
						|
	}
 | 
						|
 | 
						|
	public function testAvailable():Void
 | 
						|
	{
 | 
						|
		assertTrue(getVcs().available);
 | 
						|
	}
 | 
						|
 | 
						|
	// --------------- clone --------------- //
 | 
						|
 | 
						|
	public function testGetVcsByDir():Void
 | 
						|
	{
 | 
						|
		var vcs = getVcs();
 | 
						|
		testCloneSimple();
 | 
						|
 | 
						|
		assertEquals(vcs, Vcs.get(id, {quiet: true}));
 | 
						|
	}
 | 
						|
 | 
						|
	public function testCloneSimple():Void
 | 
						|
	{
 | 
						|
		var vcs = getVcs();
 | 
						|
		var dir = vcs.directory + counter++;
 | 
						|
		vcs.clone(dir, url);
 | 
						|
 | 
						|
		assertTrue(FileSystem.exists(dir));
 | 
						|
		assertTrue(FileSystem.isDirectory(dir));
 | 
						|
 | 
						|
		assertTrue(FileSystem.exists('$dir/.${vcs.directory}'));
 | 
						|
		assertTrue(FileSystem.isDirectory('$dir/.${vcs.directory}'));
 | 
						|
	}
 | 
						|
 | 
						|
	public function testCloneBranch():Void
 | 
						|
	{
 | 
						|
		var vcs = getVcs();
 | 
						|
		var dir = vcs.directory + counter++;
 | 
						|
		vcs.clone(dir, url, "develop");
 | 
						|
 | 
						|
		assertTrue(FileSystem.exists(dir));
 | 
						|
		assertTrue(FileSystem.isDirectory(dir));
 | 
						|
 | 
						|
		assertTrue(FileSystem.exists('$dir/.${vcs.directory}'));
 | 
						|
		assertTrue(FileSystem.isDirectory('$dir/.${vcs.directory}'));
 | 
						|
	}
 | 
						|
 | 
						|
	public function testCloneBranchTag_0_9_2():Void
 | 
						|
	{
 | 
						|
		var vcs = getVcs();
 | 
						|
		var dir = vcs.directory + counter++;
 | 
						|
		vcs.clone(dir, url, "develop", "0.9.2");
 | 
						|
		Sys.sleep(3);
 | 
						|
		assertTrue(FileSystem.exists(dir));
 | 
						|
		assertTrue(FileSystem.exists('$dir/.${vcs.directory}'));
 | 
						|
 | 
						|
		// if that repo "README.md" was added in tag/rev.: "0.9.3"
 | 
						|
		assertFalse(FileSystem.exists(dir + "/README.md"));
 | 
						|
	}
 | 
						|
 | 
						|
	public function testCloneBranchTag_0_9_3():Void
 | 
						|
	{
 | 
						|
		var vcs = getVcs();
 | 
						|
		var dir = vcs.directory + counter++;
 | 
						|
		vcs.clone(dir, url, "develop", "0.9.3");
 | 
						|
 | 
						|
		assertTrue(FileSystem.exists(dir));
 | 
						|
		assertTrue(FileSystem.exists('$dir/.${vcs.directory}'));
 | 
						|
 | 
						|
		// if that repo "README.md" was added in tag/rev.: "0.9.3"
 | 
						|
		assertTrue(FileSystem.exists(dir + "/README.md"));
 | 
						|
	}
 | 
						|
 | 
						|
	public function testCloneBranchRev():Void
 | 
						|
	{
 | 
						|
		var vcs = getVcs();
 | 
						|
		var dir = vcs.directory + counter++;
 | 
						|
		vcs.clone(dir, url, "develop", rev);
 | 
						|
 | 
						|
		assertTrue(FileSystem.exists(dir));
 | 
						|
		assertTrue(FileSystem.exists('$dir/.${vcs.directory}'));
 | 
						|
 | 
						|
		// if that repo "README.md" was added in tag/rev.: "0.9.3"
 | 
						|
		assertFalse(FileSystem.exists(dir + "/README.md"));
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	// --------------- update --------------- //
 | 
						|
 | 
						|
	public function testUpdateBranchTag_0_9_2__toLatest():Void
 | 
						|
	{
 | 
						|
		var vcs = getVcs();
 | 
						|
		var dir = vcs.directory + counter;// increment will do in `testCloneBranchTag_0_9_2`
 | 
						|
 | 
						|
		testCloneBranchTag_0_9_2();
 | 
						|
		assertFalse(FileSystem.exists("README.md"));
 | 
						|
 | 
						|
		// save CWD:
 | 
						|
		var cwd = Sys.getCwd();
 | 
						|
		Sys.setCwd(cwd + dir);
 | 
						|
		assertTrue(FileSystem.exists("." + vcs.directory));
 | 
						|
 | 
						|
		// in this case `libName` can get any value:
 | 
						|
		vcs.update("LIBNAME");
 | 
						|
 | 
						|
		// Now we get actual version (0.9.3 or newer) with README.md.
 | 
						|
		assertTrue(FileSystem.exists("README.md"));
 | 
						|
 | 
						|
		// restore CWD:
 | 
						|
		Sys.setCwd(cwd);
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	public function testUpdateBranchTag_0_9_2__toLatest__afterUserChanges_withReset():Void
 | 
						|
	{
 | 
						|
		var vcs = getVcs();
 | 
						|
		var dir = vcs.directory + counter;// increment will do in `testCloneBranchTag_0_9_2`
 | 
						|
 | 
						|
		testCloneBranchTag_0_9_2();
 | 
						|
		assertFalse(FileSystem.exists("README.md"));
 | 
						|
 | 
						|
		// save CWD:
 | 
						|
		var cwd = Sys.getCwd();
 | 
						|
		Sys.setCwd(cwd + dir);
 | 
						|
 | 
						|
		// creating user-changes:
 | 
						|
		FileSystem.deleteFile("build.hxml");
 | 
						|
		File.saveContent("file", "new file \"file\" with content");
 | 
						|
 | 
						|
		//Hack: set the default answer:
 | 
						|
		Cli.defaultAnswer = true;
 | 
						|
 | 
						|
		// update to HEAD:
 | 
						|
		// in this case `libName` can get any value:
 | 
						|
		vcs.update("LIBNAME");
 | 
						|
 | 
						|
		// Now we get actual version (0.9.3 or newer) with README.md.
 | 
						|
		assertTrue(FileSystem.exists("README.md"));
 | 
						|
 | 
						|
		// restore CWD:
 | 
						|
		Sys.setCwd(cwd);
 | 
						|
	}
 | 
						|
 | 
						|
	public function testUpdateBranchTag_0_9_2__toLatest__afterUserChanges_withoutReset():Void
 | 
						|
	{
 | 
						|
		var vcs = getVcs();
 | 
						|
		var dir = vcs.directory + counter;// increment will do in `testCloneBranchTag_0_9_2`
 | 
						|
 | 
						|
		testCloneBranchTag_0_9_2();
 | 
						|
		assertFalse(FileSystem.exists("README.md"));
 | 
						|
 | 
						|
		// save CWD:
 | 
						|
		var cwd = Sys.getCwd();
 | 
						|
		Sys.setCwd(cwd + dir);
 | 
						|
 | 
						|
		// creating user-changes:
 | 
						|
		FileSystem.deleteFile("build.hxml");
 | 
						|
		File.saveContent("file", "new file \"file\" with content");
 | 
						|
 | 
						|
		//Hack: set the default answer:
 | 
						|
		Cli.defaultAnswer = false;
 | 
						|
 | 
						|
		// update to HEAD:
 | 
						|
		// in this case `libName` can get any value:
 | 
						|
		vcs.update("LIBNAME");
 | 
						|
 | 
						|
		// We get no reset and update:
 | 
						|
		assertTrue(FileSystem.exists("file"));
 | 
						|
		assertFalse(FileSystem.exists("build.hxml"));
 | 
						|
		assertFalse(FileSystem.exists("README.md"));
 | 
						|
 | 
						|
		// restore CWD:
 | 
						|
		Sys.setCwd(cwd);
 | 
						|
	}
 | 
						|
 | 
						|
	//----------------- tools -------------------//
 | 
						|
 | 
						|
	inline function getVcs():Vcs
 | 
						|
	{
 | 
						|
		return Vcs.get(id, {quiet: true});
 | 
						|
	}
 | 
						|
}
 |