Files
UnrealEngine/Engine/Source/Programs/Shared/EpicGames.Core.Tests/FileSetTests.cs
2025-05-18 13:04:45 +08:00

142 lines
4.0 KiB
C#

// Copyright Epic Games, Inc. All Rights Reserved.
using System;
using System.IO;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace EpicGames.Core.Tests
{
[TestClass]
public class FileSetTests
{
private readonly DirectoryReference _tempDir;
public FileSetTests()
{
_tempDir = CreateTempDir();
}
[TestMethod]
public void FileSetContainsAllFiles()
{
FileSet allFiles = FileSet.FromDirectory(new DirectoryReference(_tempDir.FullName));
Assert.IsTrue(allFiles.Count() == 4);
}
[TestMethod]
public void FileSetFilterContainsOnlyFileTypeWildcard()
{
FileSet allFiles = FileSet.FromDirectory(new DirectoryReference(_tempDir.FullName));
// Make sure we have filtered to just what is in a sub-directory
FileSet justMdFile = allFiles.Filter("*.md");
Assert.IsTrue(justMdFile.Count() == 1);
// Make sure filtered fileset contains root level file and sub-directory file
FileSet justTxtFile = allFiles.Filter("*.txt");
Assert.IsTrue(justTxtFile.Count() == 2);
}
[TestMethod]
public void FileSetFilterExcludesWildcardWithMinus()
{
FileSet allFiles = FileSet.FromDirectory(new DirectoryReference(_tempDir.FullName));
FileSet withoutMd = allFiles.Filter("*;-*.md");
Assert.IsTrue(withoutMd.Count() == 3);
FileSet withoutTxtFile = allFiles.Filter("*;-*.txt");
Assert.IsTrue(withoutTxtFile.Count() == 2);
}
[TestMethod]
public void FileSetExceptExcludesFileTypeWildcard()
{
FileSet allFiles = FileSet.FromDirectory(new DirectoryReference(_tempDir.FullName));
// Make sure except properly excludes files in root directory and sub-directories
FileSet withoutMd = allFiles.Except("*.md");
Assert.IsTrue(withoutMd.Count() == 3);
// Make sure except works with files in the root as well as sub-directories
FileSet withoutTxtFile = allFiles.Except("*.txt");
Assert.IsTrue(withoutTxtFile.Count() == 2);
}
[TestMethod]
public void FileSetFilterContainsDirectoryName()
{
FileSet allFiles = FileSet.FromDirectory(new DirectoryReference(_tempDir.FullName));
FileSet results = allFiles.Filter("dir1/dir1.txt");
Assert.IsTrue(results.Count() == 1);
}
[TestMethod]
public void FileSetFilterContainsMultipleDirectoryName()
{
FileSet allFiles = FileSet.FromDirectory(new DirectoryReference(_tempDir.FullName));
FileSet results = allFiles.Filter("dir1/dir2/dir2.md");
Assert.IsTrue(results.Count() == 1);
}
[TestMethod]
public void FileSetFilterContainsTripleDotSuffix()
{
FileSet allFiles = FileSet.FromDirectory(new DirectoryReference(_tempDir.FullName));
FileSet results = allFiles.Filter("dir1/...");
Assert.IsTrue(results.Count() == 2);
}
[TestMethod]
public void FileSetFilterContainsTripleDotPrefixAndSuffix()
{
FileSet allFiles = FileSet.FromDirectory(new DirectoryReference(_tempDir.FullName));
FileSet results = allFiles.Filter(".../dir2/...");
Assert.IsTrue(results.Count() == 1);
}
[TestInitialize]
public void SetupTempDir()
{
string rootTxt = Path.Join(_tempDir.FullName, "root.txt");
File.WriteAllText(rootTxt, "placeholder");
string rootPdb = Path.Join(_tempDir.FullName, "rootPdb.pdb");
File.WriteAllText(rootPdb, "placeholder");
string dir1 = Path.Join(_tempDir.FullName, "dir1");
Directory.CreateDirectory(dir1);
string dir1Txt = Path.Join(dir1, "dir1.txt");
File.WriteAllText(dir1Txt, "placeholder");
string dir2 = Path.Join(dir1, "dir2");
Directory.CreateDirectory(dir2);
string dir2Md = Path.Join(dir2, "dir2.md");
File.WriteAllText(dir2Md, "placeholder");
}
[TestCleanup]
public void RemoveTempDir()
{
if (Directory.Exists(_tempDir.FullName))
{
Directory.Delete(_tempDir.FullName, true);
}
}
private static DirectoryReference CreateTempDir()
{
string tempDir = Path.Join(Path.GetTempPath(), "epicgames-core-tests-" + Guid.NewGuid().ToString()[..8]);
Directory.CreateDirectory(tempDir);
return new DirectoryReference(tempDir);
}
}
}