anchor.diff:    end; { If File Found with FindFirst }
   end;
   { -------------------------------------------------------------------------- }
  -class function TAbTestCase.FilesInDirectory(const aDir : string) : TStringList;
  +class function TAbTestCase.FilesInDirectory(const aDir : string) : TAbDirEntries;
   var
     SR : TSearchRec;
  -begin
  +  i, j: Integer;
  +  Temp: TAbDirEntry;
  +begin
  +  // Retrieve both files and sizes for files.  See CheckDirMatch for details.
     if not DirectoryExists(aDir) then
       raise ETestFailure.Create('Directory Requested does not exist : ' + aDir);
  -  Result := TStringList.Create;
  -  Result.Sorted := True;
  +  Result := nil;
     if FindFirst(AbAddBackSlash(aDir) + '*', faAnyFile, SR) = 0 then begin
       repeat
  -      if (SR.Attr and faDirectory = 0) and // Don't include sub directories
  -         (Pos('?', SR.Name) = 0) then      // Don't include Unicode filenames in ANSI builds
  -        Result.Add(SR.Name);
  +      if (SR.Attr and faDirectory = 0) and  // Don't include sub directories
  +         (Pos('?', SR.Name) = 0) then begin // Don't include Unicode filenames in ANSI builds
  +        SetLength(Result, Length(Result) + 1);
  +        with Result[Length(Result) - 1] do begin
  +          Name := SR.Name;
  +          Size := SR.Size;
  +        end;
  +      end;
       until FindNext(SR) <> 0;
       FindClose(SR);
     end;
  +  // Sort results
  +  for i := Low(Result) to High(Result) do
  +    for j := Succ(i) to High(Result) do
  +      if CompareText(Result[i].Name, Result[j].Name) > 0 then begin
  +        Temp := Result[i];
  +        Result[i] := Result[j];
  +        Result[j] := Temp
  +      end;
   end;
   { -------------------------------------------------------------------------- }
   class function TAbTestCase.TestFileDir: string;
  
positive.code: { ===== TAbTestCase ======================================================== }
  procedure TAbTestCase.CheckDirMatch(aDir1, aDir2 : string);
  var
    d1,d2 : TStringList;
    I, J : Integer;
  begin
    d1 := FilesInDirectory(aDir1);
    d2 := FilesInDirectory(aDir2);
    try
      Check(d1.count = d2.count,
        'Number of files in directories do not match');
      for I := 0 to d1.Count - 1 do begin
        J := d2.IndexOf(d1[I]); // Allow case insensitive matches on case-sensitive filesystems
        if J = - 1 then
          Fail(d1[I] + ' is missing in directory')
        else
          CheckFilesMatch(AbAddBackSlash(aDir1) + d1[i], AbAddBackSlash(aDir2) + d2[J], d1[i] + ' does not match');
      end;
    finally
      d1.Free;
      d2.Free;
    end;
  end;
  { -------------------------------------------------------------------------- }
  
negative.code:     procedure CreateDummyFile(aFileName : string; aSize : Integer);
      procedure SetUp; override;
      procedure TearDown; override;
      class function FilesInDirectory(const aDir : string) : TAbDirEntries;
      procedure CheckDirMatch(aDir1, aDir2 : string);
      // Call this routine with GREAT Caution!!!!
      procedure DelTree(aDir : string);
  