/*************************************************************************** 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; } } }