/ILSpy.BamlDecompiler/Tests/TestRunner.cs

http://github.com/icsharpcode/ILSpy · C# · 146 lines · 125 code · 19 blank · 2 comment · 6 complexity · 90d6321440d212e870123291cfbafa08 MD5 · raw file

  1. // Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
  2. // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
  3. using System;
  4. using System.Collections;
  5. using System.Diagnostics;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Resources;
  9. using System.Xml.Linq;
  10. using ICSharpCode.Decompiler.Tests.Helpers;
  11. using ICSharpCode.ILSpy;
  12. using Mono.Cecil;
  13. using NUnit.Framework;
  14. using Ricciolo.StylesExplorer.MarkupReflection;
  15. namespace ILSpy.BamlDecompiler.Tests
  16. {
  17. [TestFixture]
  18. public class TestRunner
  19. {
  20. [Test]
  21. public void Simple()
  22. {
  23. RunTest("cases/simple");
  24. }
  25. [Test]
  26. public void SimpleDictionary()
  27. {
  28. RunTest("cases/simpledictionary");
  29. }
  30. [Test]
  31. public void Resources()
  32. {
  33. RunTest("cases/resources");
  34. }
  35. [Test]
  36. [Ignore("Broken on AppVeyor CI (extra x:ConnectionId attribute)")]
  37. public void SimpleNames()
  38. {
  39. RunTest("cases/simplenames");
  40. }
  41. [Test]
  42. public void AvalonDockBrushes()
  43. {
  44. RunTest("cases/avalondockbrushes");
  45. }
  46. [Test]
  47. public void AvalonDockCommon()
  48. {
  49. RunTest("cases/avalondockcommon");
  50. }
  51. [Test]
  52. public void AttachedEvent()
  53. {
  54. RunTest("cases/attachedevent");
  55. }
  56. [Test]
  57. public void Dictionary1()
  58. {
  59. RunTest("cases/dictionary1");
  60. }
  61. [Test]
  62. public void MarkupExtension()
  63. {
  64. RunTest("cases/markupextension");
  65. }
  66. [Test]
  67. public void SimplePropertyElement()
  68. {
  69. RunTest("cases/simplepropertyelement");
  70. }
  71. [Test]
  72. public void Issue445()
  73. {
  74. RunTest("cases/issue445");
  75. }
  76. [Test]
  77. public void NamespacePrefix()
  78. {
  79. RunTest("cases/namespaceprefix");
  80. }
  81. [Test]
  82. public void EscapeSequence()
  83. {
  84. RunTest("cases/escapesequence");
  85. }
  86. #region RunTest
  87. void RunTest(string name)
  88. {
  89. RunTest(name, typeof(TestRunner).Assembly.Location, Path.Combine("..\\..\\Tests", name + ".xaml"));
  90. }
  91. void RunTest(string name, string asmPath, string sourcePath)
  92. {
  93. var resolver = new DefaultAssemblyResolver();
  94. var assembly = AssemblyDefinition.ReadAssembly(asmPath, new ReaderParameters { AssemblyResolver = resolver });
  95. Resource res = assembly.MainModule.Resources.First();
  96. Stream bamlStream = LoadBaml(res, name + ".baml");
  97. Assert.IsNotNull(bamlStream);
  98. XDocument document = BamlResourceEntryNode.LoadIntoDocument(resolver, assembly, bamlStream);
  99. CodeAssert.AreEqual(File.ReadAllText(sourcePath), document.ToString());
  100. }
  101. Stream LoadBaml(Resource res, string name)
  102. {
  103. EmbeddedResource er = res as EmbeddedResource;
  104. if (er != null) {
  105. Stream s = er.GetResourceStream();
  106. s.Position = 0;
  107. ResourceReader reader;
  108. try {
  109. reader = new ResourceReader(s);
  110. }
  111. catch (ArgumentException) {
  112. return null;
  113. }
  114. foreach (DictionaryEntry entry in reader.Cast<DictionaryEntry>().OrderBy(e => e.Key.ToString())) {
  115. if (entry.Key.ToString() == name) {
  116. if (entry.Value is Stream)
  117. return (Stream)entry.Value;
  118. if (entry.Value is byte[])
  119. return new MemoryStream((byte[])entry.Value);
  120. }
  121. }
  122. }
  123. return null;
  124. }
  125. #endregion
  126. }
  127. }