<#@ template language="C#" hostspecific="True" #> <#@ output extension=".generated.cs" #> <#@ assembly name="System.Core.dll" #> <#@ Assembly Name="$(ProjectDir)bin\Debug\Newtonsoft.Json.dll" #> <#@ Assembly Name="$(ProjectDir)bin\Debug\BeerLog.Tests.dll" #> <#@ Import Namespace="System.Collections.Generic" #> <#@ Import Namespace="System.IO" #> <#@ Import Namespace="System.Linq" #> <#@ Import Namespace="System.Reflection" #> <#@ Import Namespace="System.Text" #> <#@ Import Namespace="BeerLog.Tests" #> <#@ Import Namespace="Newtonsoft.Json" #> namespace <#= System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("NamespaceHint") #> { // see also TestSettings.json outside ide in this folder for default values public partial class TestSettings //.generated.cs { private static readonly TestSettings _defaultInstance; public static TestSettings Default { get {return _defaultInstance;} } static TestSettings() { _defaultInstance = new TestSettings { <# var filename = string.Empty; const string SETTINGS_FILE = "TestSettings.json"; try { filename = Host.ResolvePath(SETTINGS_FILE); } catch (FileNotFoundException) { var fiReference = new FileInfo(Host.ResolvePath("App.xaml")); filename = Path.Combine(fiReference.Directory.FullName, SETTINGS_FILE); using (var sw = File.CreateText(filename)) { var json = JsonForPublicProperties(new TestSettings()); sw.Write(json); sw.Close(); } } using (var sr = File.OpenText(filename)) { var reader = new JsonTextReader(sr); var sb = new StringBuilder(); while (reader.Read()) { switch (reader.TokenType) { case JsonToken.PropertyName: sb.AppendFormat("\t\t\t\t{0} = ", reader.Value); break; case JsonToken.Null: sb.Append("null," + Environment.NewLine); break; case JsonToken.Integer: case JsonToken.Float: sb.Append(reader.Value + "," + Environment.NewLine); break; case JsonToken.Boolean: sb.Append(reader.Value.ToString().ToLower() + "," + Environment.NewLine); break; case JsonToken.Date: var dt = DateTime.Parse(reader.Value.ToString()); if (dt == DateTime.MinValue) sb.AppendFormat("System.DateTime.MinValue," + Environment.NewLine); else if (dt == DateTime.MaxValue) sb.AppendFormat("System.DateTime.MaxValue," + Environment.NewLine); else sb.AppendFormat("new System.DateTime({0},{1},{2},{3},{4},{5}),{6}", dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, Environment.NewLine); break; case JsonToken.String: sb.AppendFormat("{0}{1}{0},{2}", reader.QuoteChar.ToString(), reader.Value, Environment.NewLine); break; } } Write(sb.ToString().Substring(0, sb.Length - ("," + Environment.NewLine).Length)); } #> }; } } } <#+ public static string JsonForPublicProperties(object o) { var props = o.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty).ToList(); using (var sw = new StringWriter()) { using (var writer = new JsonTextWriter(sw) { Formatting = Formatting.Indented }) { writer.WriteStartObject(); props.ForEach(pi => { writer.WritePropertyName(pi.Name); writer.WriteValue(pi.GetValue(o, null)); }); writer.WriteEndObject(); writer.Close(); } sw.Close(); return sw.ToString(); } } #>