in src/PSRule/Runtime/Assert.cs [892:926]
public AssertResult FileHeader(PSObject inputObject, string field, string[] header, string prefix = null)
{
// Guard parameters
if (GuardNullParam(inputObject, nameof(inputObject), out var result) ||
GuardNullOrEmptyParam(field, nameof(field), out result) ||
GuardField(inputObject, field, false, out var fieldValue, out result) ||
GuardString(fieldValue, out var value, out result))
return result;
// File does not exist
if (!TryFilePath(value, out _))
return Fail(ReasonStrings.FilePath, value);
// No header
if (header == null || header.Length == 0)
return Pass();
if (string.IsNullOrEmpty(prefix))
prefix = DetectLinePrefix(GetFileType(value));
var lineNo = 0;
foreach (var content in File.ReadLines(value))
{
if (lineNo >= header.Length)
break;
if (content != string.Concat(prefix, header[lineNo]))
return Fail(ReasonStrings.FileHeader);
lineNo++;
}
// Catch file has less lines than header
return lineNo < header.Length ? Fail(ReasonStrings.FileHeader) : Pass();
}