/***************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
This code is licensed under the Visual Studio SDK license terms.
THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
***************************************************************************/
using System;
using System.IO;
using System.Xml;
namespace Microsoft.VsSDK.UnitTestLibrary
{
public sealed class FileGenerator
{
private string path;
public FileGenerator(string relativePath)
{
// Generate temp directory name
this.path = Path.Combine(Path.GetTempPath(), relativePath);
// Delete it if it already exist to prevent being affected by previous runs
try
{
if (Directory.Exists(this.path))
Directory.Delete(this.path, true);
}
catch (IOException)
{ }
// Create the directory
Directory.CreateDirectory(this.path);
}
///
/// Create the specified path under a temp directory
/// The file will have some content
///
/// FileName, can include relative path
public string CreateFile(string fileName)
{
return this.CreateFileWithSpecificContent(fileName, fileName);
}
public string CreateFileFromEmbeddedContent(string fileName, string content)
{
return this.CreateFileWithSpecificContent(fileName, content);
}
public string CreateXmlFileFromEmbeddedContent(string fileName, string content)
{
// Create an XML document with the specific content
var doc = new XmlDocument() { XmlResolver = null };
doc.Load(XmlReader.Create(new StringReader(content)));
var outputPath = this.GetFullPath(fileName);
doc.Save(outputPath);
return outputPath;
}
///
/// Create the specified path under a temp directory
/// Add the specified content to the file
///
/// FileName, can include relative path
/// Content to add to the file
public string CreateFileWithSpecificContent(string fileName, string content)
{
var filePath = this.GetFullPath(fileName);
var directory = Path.GetDirectoryName(filePath);
if (!Directory.Exists(directory))
Directory.CreateDirectory(directory);
using (StreamWriter file = File.CreateText(filePath))
{
file.WriteLine(content);
}
return filePath;
}
///
/// Verify that the files have the same content
///
/// Full path of one of the file
/// Full path of the other file
/// What kind of comparaison to use
///
public static bool FilesContentIsSame(string path1, string path2, StringComparison comparisonType)
{
string content1;
string content2;
using (StreamReader contentReader = File.OpenText(path1))
{
content1 = contentReader.ReadToEnd();
}
using (StreamReader contentReader = File.OpenText(path2))
{
content2 = contentReader.ReadToEnd();
}
return String.Equals(content1, content2, comparisonType);
}
private string GetFullPath(string fileName)
{
var filePath = Path.Combine(this.path, fileName);
return filePath;
}
}
}