Skip to content

Commit 4f21122

Browse files
author
Michael Ganss
committed
Handle redefines (see #299)
Add XBRL test
1 parent 585d6f3 commit 4f21122

File tree

4 files changed

+44704
-20
lines changed

4 files changed

+44704
-20
lines changed

XmlSchemaClassGenerator.Tests/XmlTests.cs

+56-7
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@ private static IEnumerable<string> ConvertXml(string name, string xsd, Generator
105105
const string DtsxPattern = "xsd/dtsx/dtsx2.xsd";
106106
const string WfsPattern = "xsd/wfs/schemas.opengis.net/wfs/2.0/wfs.xsd";
107107
const string EppPattern = "xsd/epp/*.xsd";
108-
const string XbrlPattern = "xsd/xbrl/xhtml-inlinexbrl-1_1.xsd";
109108

110109
// IATA test takes too long to perform every time
111110

@@ -528,17 +527,67 @@ public void TestEpp()
528527
[UseCulture("en-US")]
529528
public void TestXbrl()
530529
{
531-
var output = new FileWatcherOutputWriter(Path.Combine("output", "xbrl"));
532-
var generator = new Generator
530+
var outputPath = Path.Combine("output", "xbrl");
531+
532+
var gen = new Generator
533533
{
534-
OutputWriter = output,
534+
OutputFolder = outputPath,
535535
GenerateInterfaces = false,
536536
UniqueTypeNamesAcrossNamespaces = true,
537537
};
538-
generator.NamespaceProvider.Add(new NamespaceKey("http://www.xbrl.org/2003/XLink"), "XbrlLink");
539-
var assembly = Compiler.Generate("xbrl", XbrlPattern, generator);
538+
539+
gen.NamespaceProvider.Add(new NamespaceKey("http://www.xbrl.org/2003/XLink"), "XbrlLink");
540+
541+
var xsdFiles = new[]
542+
{
543+
"xhtml-inlinexbrl-1_1.xsd",
544+
}.Select(x => Path.Combine(Directory.GetCurrentDirectory(), "xsd", "xbrl", x)).ToList();
545+
546+
var assembly = Compiler.GenerateFiles("Xbrl", xsdFiles, gen);
540547
Assert.NotNull(assembly);
541-
//TestSamples("xbrl", XbrlPattern);
548+
549+
var testFiles = new Dictionary<string, string>
550+
{
551+
{ "Schaltbau.xhtml", "XhtmlPeriodHtmlPeriodType" },
552+
};
553+
554+
foreach (var testFile in testFiles)
555+
{
556+
var type = assembly.GetTypes().SingleOrDefault(t => t.Name == testFile.Value);
557+
Assert.NotNull(type);
558+
559+
var serializer = new XmlSerializer(type);
560+
serializer.UnknownNode += new XmlNodeEventHandler(UnknownNodeHandler);
561+
serializer.UnknownAttribute += new XmlAttributeEventHandler(UnknownAttributeHandler);
562+
var unknownNodeError = false;
563+
var unknownAttrError = false;
564+
565+
void UnknownNodeHandler(object sender, XmlNodeEventArgs e)
566+
{
567+
unknownNodeError = true;
568+
}
569+
570+
void UnknownAttributeHandler(object sender, XmlAttributeEventArgs e)
571+
{
572+
unknownAttrError = true;
573+
}
574+
575+
var xmlString = File.ReadAllText($"xml/xbrl_tests/{testFile.Key}");
576+
xmlString = Regex.Replace(xmlString, "xsi:schemaLocation=\"[^\"]*\"", string.Empty);
577+
var reader = XmlReader.Create(new StringReader(xmlString), new XmlReaderSettings { IgnoreWhitespace = true });
578+
579+
var isDeserializable = serializer.CanDeserialize(reader);
580+
Assert.True(isDeserializable);
581+
582+
var deserializedObject = serializer.Deserialize(reader);
583+
Assert.False(unknownNodeError);
584+
Assert.False(unknownAttrError);
585+
586+
var serializedXml = Serialize(serializer, deserializedObject, GetNamespacesFromSource(xmlString));
587+
588+
var deserializedXml = serializer.Deserialize(new StringReader(serializedXml));
589+
AssertEx.Equal(deserializedObject, deserializedXml);
590+
}
542591
}
543592

544593
private void TestSamples(string name, string pattern)

0 commit comments

Comments
 (0)