Quellcode durchsuchen

Check if xclip is installed.

BDisp vor 4 Jahren
Ursprung
Commit
8bdbb12c8a
1 geänderte Dateien mit 38 neuen und 2 gelöschten Zeilen
  1. 38 2
      UnitTests/ClipboardTests.cs

+ 38 - 2
UnitTests/ClipboardTests.cs

@@ -22,6 +22,7 @@ namespace Terminal.Gui.Core {
 			Application.Init (new FakeDriver (), new FakeMainLoop (() => FakeConsole.ReadKey (true)));
 
 			var clipText = "This is a clipboard unit test to get clipboard from OS.";
+			var exit = false;
 
 			Application.Iteration += () => {
 				if (RuntimeInformation.IsOSPlatform (OSPlatform.Windows)) {
@@ -62,6 +63,11 @@ namespace Terminal.Gui.Core {
 						copy.WaitForExit ();
 					}
 				} else if (RuntimeInformation.IsOSPlatform (OSPlatform.Linux)) {
+					if (exit = xclipExists () == false) {
+						// xclip doesn't exist then exit.
+						Application.RequestStop ();
+					}
+
 					using (Process bash = new Process {
 						StartInfo = new ProcessStartInfo {
 							FileName = "bash",
@@ -81,7 +87,9 @@ namespace Terminal.Gui.Core {
 
 			Application.Run ();
 
-			Assert.Equal (clipText, Clipboard.Contents);
+			if (!exit) {
+				Assert.Equal (clipText, Clipboard.Contents);
+			}
 
 			Application.Shutdown ();
 		}
@@ -93,6 +101,7 @@ namespace Terminal.Gui.Core {
 
 			var clipText = "This is a clipboard unit test to set the OS clipboard.";
 			var clipReadText = "";
+			var exit = false;
 
 			Application.Iteration += () => {
 				Clipboard.Contents = clipText;
@@ -123,6 +132,11 @@ namespace Terminal.Gui.Core {
 						paste.WaitForExit ();
 					}
 				} else if (RuntimeInformation.IsOSPlatform (OSPlatform.Linux)) {
+					if (exit = xclipExists () == false) {
+						// xclip doesn't exist then exit.
+						Application.RequestStop ();
+					}
+
 					using (Process bash = new Process {
 						StartInfo = new ProcessStartInfo {
 							RedirectStandardOutput = true,
@@ -142,9 +156,31 @@ namespace Terminal.Gui.Core {
 
 			Application.Run ();
 
-			Assert.Equal (clipText, clipReadText);
+			if (!exit) {
+				Assert.Equal (clipText, clipReadText);
+			}
 
 			Application.Shutdown ();
 		}
+
+		bool xclipExists ()
+		{
+			using (Process bash = new Process {
+				StartInfo = new ProcessStartInfo {
+					FileName = "bash",
+					Arguments = $"-c \"which xclip\"",
+					RedirectStandardOutput = true,
+				}
+			}) {
+				bash.Start ();
+				bool exist = bash.StandardOutput.ReadToEnd ().TrimEnd () != "";
+				bash.StandardOutput.Close ();
+				bash.WaitForExit ();
+				if (exist) {
+					return true;
+				}
+			}
+			return false;
+		}
 	}
 }