FileSystemIconProviderTests.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using System.IO.Abstractions;
  2. using System.IO.Abstractions.TestingHelpers;
  3. using System.Runtime.InteropServices;
  4. using System.Text;
  5. namespace Terminal.Gui.FileServicesTests;
  6. public class FileSystemIconProviderTests
  7. {
  8. [Fact]
  9. public void FlagsShouldBeMutuallyExclusive ()
  10. {
  11. var p = new FileSystemIconProvider { UseUnicodeCharacters = false, UseNerdIcons = false };
  12. Assert.False (p.UseUnicodeCharacters);
  13. Assert.False (p.UseNerdIcons);
  14. p.UseUnicodeCharacters = true;
  15. Assert.True (p.UseUnicodeCharacters);
  16. Assert.False (p.UseNerdIcons);
  17. // Cannot use both nerd and unicode so unicode should have switched off
  18. p.UseNerdIcons = true;
  19. Assert.True (p.UseNerdIcons);
  20. Assert.False (p.UseUnicodeCharacters);
  21. // Cannot use both unicode and nerd so now nerd should have switched off
  22. p.UseUnicodeCharacters = true;
  23. Assert.True (p.UseUnicodeCharacters);
  24. Assert.False (p.UseNerdIcons);
  25. }
  26. [Fact]
  27. public void TestBasicIcons ()
  28. {
  29. var p = new FileSystemIconProvider ();
  30. IFileSystem fs = GetMockFileSystem ();
  31. Assert.Equal (IsWindows () ? new Rune ('\\') : new Rune ('/'), p.GetIcon (fs.DirectoryInfo.New (@"c:\")));
  32. Assert.Equal (
  33. new Rune (' '),
  34. p.GetIcon (
  35. fs.FileInfo.New (GetFileSystemRoot () + @"myfile.txt")
  36. )
  37. );
  38. }
  39. private string GetFileSystemRoot () { return IsWindows () ? @"c:\" : "/"; }
  40. private IFileSystem GetMockFileSystem ()
  41. {
  42. string root = GetFileSystemRoot ();
  43. var fileSystem = new MockFileSystem (new Dictionary<string, MockFileData> (), root);
  44. fileSystem.AddFile (root + @"myfile.txt", new MockFileData ("Testing is meh."));
  45. fileSystem.AddFile (root + @"demo/jQuery.js", new MockFileData ("some js"));
  46. fileSystem.AddFile (root + @"demo/mybinary.exe", new MockFileData ("some js"));
  47. fileSystem.AddFile (root + @"demo/image.gif", new MockFileData (new byte [] { 0x12, 0x34, 0x56, 0xd2 }));
  48. var m = (MockDirectoryInfo)fileSystem.DirectoryInfo.New (root + @"demo/subfolder");
  49. m.Create ();
  50. return fileSystem;
  51. }
  52. private bool IsWindows () { return RuntimeInformation.IsOSPlatform (OSPlatform.Windows); }
  53. }