FileOrDirectoryExistsConstraint
FileOrDirectoryExistsConstraint is used to determine if a file or directory exists
using System;
using System.IO;
using System.Runtime.CompilerServices;
namespace NUnit.Framework.Constraints
{
[NullableContext(1)]
[Nullable(0)]
public class FileOrDirectoryExistsConstraint : Constraint
{
private bool _ignoreDirectories;
private bool _ignoreFiles;
public FileOrDirectoryExistsConstraint IgnoreDirectories {
get {
_ignoreDirectories = true;
return this;
}
}
public FileOrDirectoryExistsConstraint IgnoreFiles {
get {
_ignoreFiles = true;
return this;
}
}
public override string Description {
get {
if (_ignoreDirectories)
return "file exists";
if (_ignoreFiles)
return "directory exists";
return "file or directory exists";
}
}
private string ErrorSubstring {
get {
if (_ignoreDirectories)
return " or FileInfo";
if (_ignoreFiles)
return " or DirectoryInfo";
return ", FileInfo or DirectoryInfo";
}
}
public FileOrDirectoryExistsConstraint()
: base(Array.Empty<object>())
{
}
public FileOrDirectoryExistsConstraint(bool ignoreDirectories)
: base(Array.Empty<object>())
{
_ignoreDirectories = ignoreDirectories;
}
public override ConstraintResult ApplyTo<[Nullable(2)] TActual>(TActual actual)
{
if (actual == null)
throw new ArgumentNullException("actual", "The actual value must be a non-null string" + ErrorSubstring);
string text = actual as string;
if (text != null)
return CheckString(text);
if (!_ignoreFiles) {
FileInfo fileInfo = actual as FileInfo;
if (fileInfo != null)
return new ConstraintResult(this, actual, fileInfo.Exists);
}
if (!_ignoreDirectories) {
DirectoryInfo directoryInfo = actual as DirectoryInfo;
if (directoryInfo != null)
return new ConstraintResult(this, actual, directoryInfo.Exists);
}
throw new ArgumentException("The actual value must be a string" + ErrorSubstring, "actual");
}
private ConstraintResult CheckString(string actual)
{
if (string.IsNullOrEmpty(actual))
throw new ArgumentException("The actual value cannot be an empty string", "actual");
FileInfo fileInfo = new FileInfo(actual);
if (_ignoreDirectories && !_ignoreFiles)
return new ConstraintResult(this, actual, fileInfo.Exists);
DirectoryInfo directoryInfo = new DirectoryInfo(actual);
if (_ignoreFiles && !_ignoreDirectories)
return new ConstraintResult(this, actual, directoryInfo.Exists);
return new ConstraintResult(this, actual, fileInfo.Exists || directoryInfo.Exists);
}
}
}