Skip to content

Commit

Permalink
Handle redefines (see #299)
Browse files Browse the repository at this point in the history
Add XBRL test
  • Loading branch information
Michael Ganss committed Jan 21, 2022
1 parent 585d6f3 commit 4f21122
Show file tree
Hide file tree
Showing 4 changed files with 44,704 additions and 20 deletions.
63 changes: 56 additions & 7 deletions XmlSchemaClassGenerator.Tests/XmlTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,6 @@ private static IEnumerable<string> ConvertXml(string name, string xsd, Generator
const string DtsxPattern = "xsd/dtsx/dtsx2.xsd";
const string WfsPattern = "xsd/wfs/schemas.opengis.net/wfs/2.0/wfs.xsd";
const string EppPattern = "xsd/epp/*.xsd";
const string XbrlPattern = "xsd/xbrl/xhtml-inlinexbrl-1_1.xsd";

// IATA test takes too long to perform every time

Expand Down Expand Up @@ -528,17 +527,67 @@ public void TestEpp()
[UseCulture("en-US")]
public void TestXbrl()
{
var output = new FileWatcherOutputWriter(Path.Combine("output", "xbrl"));
var generator = new Generator
var outputPath = Path.Combine("output", "xbrl");

var gen = new Generator
{
OutputWriter = output,
OutputFolder = outputPath,
GenerateInterfaces = false,
UniqueTypeNamesAcrossNamespaces = true,
};
generator.NamespaceProvider.Add(new NamespaceKey("http://www.xbrl.org/2003/XLink"), "XbrlLink");
var assembly = Compiler.Generate("xbrl", XbrlPattern, generator);

gen.NamespaceProvider.Add(new NamespaceKey("http://www.xbrl.org/2003/XLink"), "XbrlLink");

var xsdFiles = new[]
{
"xhtml-inlinexbrl-1_1.xsd",
}.Select(x => Path.Combine(Directory.GetCurrentDirectory(), "xsd", "xbrl", x)).ToList();

var assembly = Compiler.GenerateFiles("Xbrl", xsdFiles, gen);
Assert.NotNull(assembly);
//TestSamples("xbrl", XbrlPattern);

var testFiles = new Dictionary<string, string>
{
{ "Schaltbau.xhtml", "XhtmlPeriodHtmlPeriodType" },
};

foreach (var testFile in testFiles)
{
var type = assembly.GetTypes().SingleOrDefault(t => t.Name == testFile.Value);
Assert.NotNull(type);

var serializer = new XmlSerializer(type);
serializer.UnknownNode += new XmlNodeEventHandler(UnknownNodeHandler);
serializer.UnknownAttribute += new XmlAttributeEventHandler(UnknownAttributeHandler);
var unknownNodeError = false;
var unknownAttrError = false;

void UnknownNodeHandler(object sender, XmlNodeEventArgs e)
{
unknownNodeError = true;
}

void UnknownAttributeHandler(object sender, XmlAttributeEventArgs e)
{
unknownAttrError = true;
}

var xmlString = File.ReadAllText($"xml/xbrl_tests/{testFile.Key}");
xmlString = Regex.Replace(xmlString, "xsi:schemaLocation=\"[^\"]*\"", string.Empty);
var reader = XmlReader.Create(new StringReader(xmlString), new XmlReaderSettings { IgnoreWhitespace = true });

var isDeserializable = serializer.CanDeserialize(reader);
Assert.True(isDeserializable);

var deserializedObject = serializer.Deserialize(reader);
Assert.False(unknownNodeError);
Assert.False(unknownAttrError);

var serializedXml = Serialize(serializer, deserializedObject, GetNamespacesFromSource(xmlString));

var deserializedXml = serializer.Deserialize(new StringReader(serializedXml));
AssertEx.Equal(deserializedObject, deserializedXml);
}
}

private void TestSamples(string name, string pattern)
Expand Down
Loading

0 comments on commit 4f21122

Please sign in to comment.