Selaa lähdekoodia

[test] improved TestFileSystem (not completed yet)

Andy Li 10 vuotta sitten
vanhempi
commit
825e219644

+ 0 - 2
tests/sys/.gitignore

@@ -1,2 +0,0 @@
-TestArguments.txt
-testcase-test-file.txt

+ 1 - 1
tests/sys/args.xml

@@ -1,5 +1,5 @@
 <!-- 
-This file is read by RunCi.hx at run-time and the sys test at compile-time via `-resource`.
+This file is read by the sys test at compile-time via `-resource`.
 We may compare and update the test cases of other popular langs/libs: https://gist.github.com/andyli/d55ae9ea1327bbbf749d
 -->
 <args>

+ 15 - 0
tests/sys/src/FileNames.hx

@@ -0,0 +1,15 @@
+class FileNames {
+	static public var names(default, never) = [
+		"ok",
+
+		// a space inside
+		"two words",
+
+		// Chinese, Japanese
+		// "中文,にほんご",
+
+		// "aaa...a" that has 255 characters
+		// 255 bytes is the max filename length according to http://en.wikipedia.org/wiki/Comparison_of_file_systems
+		// [for (i in 0...255) "a"].join("")
+	];
+}

+ 5 - 1
tests/sys/src/TestArguments.hx

@@ -1,5 +1,6 @@
 /**
 	This test is intented to be used by TestSys and io.TestProcess.
+	It will write the result to "temp/TestArguments.txt" (for debugging).
 */
 class TestArguments extends haxe.unit.TestCase {
 	static public var expectedArgs(get, null):Array<String>;
@@ -39,6 +40,8 @@ class TestArguments extends haxe.unit.TestCase {
 		null;
 	#end
 
+	static public var log = "temp/TestArguments.txt";
+
 	function testArgs() {
 		var args = Sys.args();
 		// trace(args);
@@ -49,7 +52,8 @@ class TestArguments extends haxe.unit.TestCase {
 	}
 
 	static function main():Void {
-		var log = sys.io.File.write("TestArguments.txt");
+		var log = sys.io.File.write(log);
+		log.writeString(haxe.Json.stringify(Sys.args()) + "\n");
 		haxe.unit.TestRunner.print = function(v){
 			log.writeString(v);
 		};

+ 87 - 14
tests/sys/src/TestFileSystem.hx

@@ -1,21 +1,94 @@
 import sys.FileSystem;
 
 class TestFileSystem extends haxe.unit.TestCase {
-	function testSimpleDir():Void {
-		assertFalse(FileSystem.exists("testCreateDirectory"));
-		FileSystem.createDirectory("testCreateDirectory");
-		assertTrue(FileSystem.exists("testCreateDirectory"));
-		assertTrue(FileSystem.isDirectory("testCreateDirectory"));
-		FileSystem.deleteDirectory("testCreateDirectory");
-		assertFalse(FileSystem.exists("testCreateDirectory"));
+	/**
+		Recursively remove a given directory.
+	*/
+	static function removeDir(dir:String):Void {
+		if (FileSystem.exists(dir)) {
+			for (item in FileSystem.readDirectory(dir)) {
+				item = haxe.io.Path.join([dir, item]);
+				if (FileSystem.isDirectory(item)) {
+					removeDir(item);
+				} else {
+					FileSystem.deleteFile(item);
+				}
+			}
+			FileSystem.deleteDirectory(dir);
+		}
 	}
 
-	function testParentDir():Void {
-		assertFalse(FileSystem.exists("../testCreateDirectory"));
-		FileSystem.createDirectory("../testCreateDirectory");
-		assertTrue(FileSystem.exists("../testCreateDirectory"));
-		assertTrue(FileSystem.isDirectory("../testCreateDirectory"));
-		FileSystem.deleteDirectory("../testCreateDirectory");
-		assertFalse(FileSystem.exists("../testCreateDirectory"));
+	var dir = "temp/TestFileSystem/";
+	var tailingSlashes = switch (Sys.systemName()) {
+		case "Windows": ["", "/", "\\"];
+		case _: ["", "/"];
+	}
+
+	override public function setup() {
+		removeDir(dir);
+		FileSystem.createDirectory(dir);
+	}
+
+	override public function tearDown() {
+		removeDir(dir);
+	}
+
+	function testReadDirectory():Void {
+		for (tailingSlash in tailingSlashes) {
+			assertEquals(0, FileSystem.readDirectory(dir).length);
+			for (name in FileNames.names) {
+				var path = dir + name + tailingSlash;
+				FileSystem.createDirectory(path);
+				var files = FileSystem.readDirectory(path);
+				assertEquals(0, files.length);
+			}
+			var files = FileSystem.readDirectory(dir);
+			for (name in FileNames.names) {
+				assertTrue(files.indexOf(name) > -1);
+			}
+			assertEquals(FileNames.names.length, files.length);
+			for (name in FileNames.names) {
+				FileSystem.deleteDirectory(dir + name);
+			}
+
+			//read current directory
+			assertTrue(FileSystem.readDirectory("." + tailingSlash).indexOf("compile.hxml") > -1);
+			//read parent directory
+			assertTrue(FileSystem.readDirectory(".." + tailingSlash).indexOf("sys") > -1);
+			//read directory with complex path
+			assertTrue(FileSystem.readDirectory("../sys/./.." + tailingSlash).indexOf("sys") > -1);
+		}
+	}
+
+	function testCreateDirectory():Void {
+		for (tailingSlash in tailingSlashes) {
+			assertEquals(0, FileSystem.readDirectory(dir).length);
+			for (name in FileNames.names) {
+				FileSystem.createDirectory(dir + name + tailingSlash);
+			}
+			var files = FileSystem.readDirectory(dir);
+			for (name in FileNames.names) {
+				assertTrue(files.indexOf(name) > -1);
+			}
+			assertEquals(FileNames.names.length, files.length);
+			for (name in FileNames.names) {
+				FileSystem.deleteDirectory(dir + name);
+			}
+
+			//create deep directory
+			var path = dir + "1/2/3" + tailingSlash;
+			FileSystem.createDirectory(path);
+			assertTrue(FileSystem.isDirectory(path));
+
+			//create directory in complex path
+			var path = dir + "1/../1/./../complex" + tailingSlash;
+			FileSystem.createDirectory(path);
+			assertTrue(FileSystem.readDirectory(dir).indexOf("complex") > -1);
+
+			FileSystem.deleteDirectory(dir + "1/2/3");
+			FileSystem.deleteDirectory(dir + "1/2");
+			FileSystem.deleteDirectory(dir + "1");
+			FileSystem.deleteDirectory(dir + "complex");
+		}
 	}
 }

+ 4 - 0
tests/sys/src/TestSys.hx

@@ -5,6 +5,8 @@ class TestSys extends haxe.unit.TestCase {
 		var args = TestArguments.expectedArgs;
 
 		var exitCode = Sys.command("haxe", ["compile-each.hxml", "--run", "TestArguments"].concat(args));
+		if (exitCode != 0)
+			trace(sys.io.File.getContent(TestArguments.log));
 		assertEquals(0, exitCode);
 
 		var exitCode =
@@ -30,6 +32,8 @@ class TestSys extends haxe.unit.TestCase {
 			#else
 				-1;
 			#end
+		if (exitCode != 0)
+			trace(sys.io.File.getContent(TestArguments.log));
 		assertEquals(0, exitCode);
 	}
 

+ 1 - 6
tests/sys/src/io/TestFileInput.hx

@@ -12,12 +12,7 @@ import sys.io.FileSeek;
  */
 class TestFileInput extends haxe.unit.TestCase {
 
-	private var path : String;
-
-	public function new() {
-		super();
-		path = 'testcase-test-file.txt';
-	}
+	private var path = 'temp/testcase-test-file.txt';
 
 	override public function setup() {
 		File.saveContent(path, "test\n1234");

+ 8 - 2
tests/sys/src/io/TestProcess.hx

@@ -9,7 +9,10 @@ class TestProcess extends haxe.unit.TestCase {
 		var args = TestArguments.expectedArgs;
 
 		var process = new Process("haxe", ["compile-each.hxml", "--run", "TestArguments"].concat(args));
-		assertEquals(0, process.exitCode());
+		var exitCode = process.exitCode();
+		if (exitCode != 0)
+			trace(sys.io.File.getContent(TestArguments.log));
+		assertEquals(0, exitCode);
 
 		var process =
 			#if (macro || interp)
@@ -34,7 +37,10 @@ class TestProcess extends haxe.unit.TestCase {
 			#else
 				null;
 			#end
-		assertEquals(0, process.exitCode());
+		var exitCode = process.exitCode();
+		if (exitCode != 0)
+			trace(sys.io.File.getContent(TestArguments.log));
+		assertEquals(0, exitCode);
 	}
 	#end
 

+ 2 - 0
tests/sys/temp/.gitignore

@@ -0,0 +1,2 @@
+*.*
+!.gitignore