private static void GenerateTestMethod(TextWriter writer, XmlToCs xmlToCs) { writer.WriteLine(testDocumentTemplate, xmlToCs.IdentifierName, xmlToCs.XmlFilename); if (xmlToCs.HasExtensionsOrSignature) { // writer.WriteLine(" Assert.Inconclusive(\"Signatures/extensions not implemented!\");"); } else { writer.WriteLine(" Assert.True(areEqual, \"Written {0} differs from the one read\");", xmlToCs.DocType.Name); } writer.WriteLine(" }\r\n\r\n"); }
private static void GenerateUblTests() { var ublXmlInputDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\..\UblSharp.Tests\Samples"); var cSharpOutputDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\..\UblSharp.Tests\Samples"); var ublDocumentTypesDictionary = typeof(BaseDocument).Assembly.GetTypes() .Where(t => t.BaseType == typeof(BaseDocument)) // .Concat(new[] { typeof(XmlSignatureType) }) .ToDictionary(k => GetQualifiedName(k).ToString(), v => v); var docsToConvert = new List <XmlToCs>(); var xmlSamplesDir = new DirectoryInfo(ublXmlInputDir); foreach (var xmlFileInfo in xmlSamplesDir.GetFiles("*.xml")) { var doc = XDocument.Load(xmlFileInfo.FullName); if (ublDocumentTypesDictionary.ContainsKey(doc.Root.Name.ToString())) { var docType = ublDocumentTypesDictionary[doc.Root.Name.ToString()]; var xmlToCs = new XmlToCs(doc.Root, docType, xmlFileInfo.Name); docsToConvert.Add(xmlToCs); } else { Console.WriteLine($"Warning: Skip {xmlFileInfo.Name} of type {doc.Root.Name}"); } } // debug sample //var d = docsToConvert.Where(n => n.IdentifierName == "UBLOrderResponse21Example").Single(); //d.GenerateClass(); //d.SaveToDir(cSharpOutputDir); //return; var sb = new StringBuilder(); using (var sw = new StringWriter(sb)) { foreach (var xmlToCs in docsToConvert) { Console.WriteLine($"{xmlToCs.IdentifierName} \t{xmlToCs.CSharpFilename}"); xmlToCs.GenerateSourceCode(); xmlToCs.SaveToDir(cSharpOutputDir); GenerateTestMethod(sw, xmlToCs); } } using (var writer = File.CreateText(Path.Combine(cSharpOutputDir, "SampleTests.partial.cs"))) // paste content into cs file later { writer.Write(testFileTemplate, sb); } }