/Test/Mono.Cecil.Tests/AssemblyTests.cs

http://github.com/jbevain/cecil · C# · 109 lines · 88 code · 20 blank · 1 comment · 2 complexity · be512f5d7ab8a361c4651d8603d204a5 MD5 · raw file

  1. using System;
  2. using Mono.Cecil;
  3. using Mono.Cecil.Cil;
  4. using NUnit.Framework;
  5. namespace Mono.Cecil.Tests {
  6. [TestFixture]
  7. public class AssemblyTests : BaseTestFixture {
  8. [Test]
  9. public void Name ()
  10. {
  11. TestModule ("hello.exe", module => {
  12. var name = module.Assembly.Name;
  13. Assert.IsNotNull (name);
  14. Assert.AreEqual ("hello", name.Name);
  15. Assert.AreEqual ("", name.Culture);
  16. Assert.AreEqual (new Version (0, 0, 0, 0), name.Version);
  17. Assert.AreEqual (AssemblyHashAlgorithm.SHA1, name.HashAlgorithm);
  18. });
  19. }
  20. [Test]
  21. public void ParseLowerCaseNameParts ()
  22. {
  23. var name = AssemblyNameReference.Parse ("Foo, version=2.0.0.0, culture=fr-FR");
  24. Assert.AreEqual ("Foo", name.Name);
  25. Assert.AreEqual (2, name.Version.Major);
  26. Assert.AreEqual (0, name.Version.Minor);
  27. Assert.AreEqual ("fr-FR", name.Culture);
  28. }
  29. [Test]
  30. public void ZeroVersion ()
  31. {
  32. var name = new AssemblyNameReference ("Foo", null);
  33. Assert.AreEqual ("0.0.0.0", name.Version.ToString (fieldCount: 4));
  34. Assert.AreEqual ("Foo, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", name.FullName);
  35. name = new AssemblyNameReference ("Foo", new Version (0, 0, 0, 0));
  36. Assert.AreEqual ("0.0.0.0", name.Version.ToString (fieldCount: 4));
  37. Assert.AreEqual ("Foo, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", name.FullName);
  38. }
  39. [Test]
  40. public void NoBuildOrMajor ()
  41. {
  42. var name = new AssemblyNameReference ("Foo", new Version (0, 0));
  43. Assert.AreEqual ("Foo, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", name.FullName);
  44. name = new AssemblyNameReference ("Foo", new Version (0, 0, 0));
  45. Assert.AreEqual ("Foo, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", name.FullName);
  46. }
  47. [Test]
  48. public void Retargetable ()
  49. {
  50. if (Platform.OnCoreClr)
  51. return;
  52. TestModule ("RetargetableExample.dll", module => {
  53. var type = module.Types [1];
  54. var property = type.Properties [0];
  55. var attribute = property.CustomAttributes [0];
  56. var argumentType = ((CustomAttributeArgument) attribute.ConstructorArguments [0].Value).Type;
  57. var reference = (AssemblyNameReference) argumentType.Scope;
  58. Assert.AreEqual (
  59. "System.Data, Version=3.5.0.0, Culture=neutral, PublicKeyToken=969db8053d3322ac, Retargetable=Yes",
  60. reference.FullName);
  61. }, verify: !Platform.OnMono);
  62. }
  63. [Test]
  64. public void SystemRuntime ()
  65. {
  66. if (Platform.OnCoreClr)
  67. return;
  68. TestModule ("System.Runtime.dll", module => {
  69. Assert.AreEqual ("System.Runtime", module.Assembly.Name.Name);
  70. Assert.AreEqual (1, module.AssemblyReferences.Count);
  71. Assert.AreNotEqual (module, module.TypeSystem.CoreLibrary);
  72. Assert.AreEqual (module.AssemblyReferences [0], module.TypeSystem.CoreLibrary);
  73. }, verify: !Platform.OnMono);
  74. }
  75. [Test]
  76. public void MismatchedLibraryAndSymbols ()
  77. {
  78. // SQLite-net.dll (from nuget) shiped with mismatched symbol files, but throwIfNoSymbol did not prevent it from throwing
  79. var parameters = new ReaderParameters {
  80. ReadSymbols = true,
  81. SymbolReaderProvider = new DefaultSymbolReaderProvider (throwIfNoSymbol: false),
  82. ThrowIfSymbolsAreNotMatching = false,
  83. };
  84. using (var module = GetResourceModule ("SQLite-net.dll", parameters)) {
  85. Assert.Null (module.SymbolReader);
  86. }
  87. }
  88. }
  89. }