using System; using System.Collections.Generic; using System.Text; using winsw; namespace winswTests.Util { /// /// Configuration XML builder, which simplifies testing of WinSW Configuration file. /// class ConfigXmlBuilder { public string Name { get; set; } public string Id { get; set; } public string Description { get; set; } public string Executable { get; set; } public bool PrintXMLVersion { get; set; } public string XMLComment { get; set; } private List configEntries; // TODO: Switch to the initializer? private ConfigXmlBuilder() { configEntries = new List(); } public static ConfigXmlBuilder create(string id = null, string name = null, string description = null, string executable = null, bool printXMLVersion = true, string xmlComment = "") { var config = new ConfigXmlBuilder(); config.Id = id ?? "myapp"; config.Name = name ?? "MyApp Service"; config.Description = description ?? "MyApp Service (powered by WinSW)"; config.Executable = executable ?? "%BASE%\\myExecutable.exe"; config.PrintXMLVersion = printXMLVersion; config.XMLComment = (xmlComment != null && xmlComment.Length == 0) ? "Just a sample configuration file generated by the test suite" : xmlComment; return config; } public string ToXMLString(bool dumpConfig = false) { StringBuilder str = new StringBuilder(); if (PrintXMLVersion) { // TODO: The encoding is generally wrong str.Append("\n"); } if (XMLComment != null) { str.AppendFormat("\n", XMLComment); } str.Append("\n"); str.AppendFormat(" {0}\n", Id); str.AppendFormat(" {0}\n", Name); str.AppendFormat(" {0}\n", Description); str.AppendFormat(" {0}\n", Executable); foreach (String entry in configEntries) { // We do not care much about pretty formatting here str.AppendFormat(" {0}\n", entry); } str.Append("\n"); string res = str.ToString(); if (dumpConfig) { Console.Out.WriteLine("Produced config:"); Console.Out.WriteLine(res); } return res; } public ServiceDescriptor ToServiceDescriptor(bool dumpConfig = false) { return ServiceDescriptor.FromXML(ToXMLString(dumpConfig)); } public ConfigXmlBuilder WithRawEntry(string entry) { configEntries.Add(entry); return this; } public ConfigXmlBuilder WithTag(string tagName, string value) { return WithRawEntry(String.Format("<{0}>{1}", tagName, value)); } } }