/src/Main/Core/Test/AddInTreeTests/RuntimeLoadAssemblyTests.cs

https://github.com/eusebiu/SharpDevelop · C# · 137 lines · 118 code · 17 blank · 2 comment · 0 complexity · 7572f7b74ab178c176885f68d68280a2 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.Generic;
  5. using System.IO;
  6. using System.Reflection;
  7. using ICSharpCode.Core;
  8. using ICSharpCode.Core.Tests.Utils;
  9. using NUnit.Framework;
  10. namespace ICSharpCode.Core.Tests.AddInTreeTests
  11. {
  12. [TestFixture]
  13. public class RuntimeLoadAssemblyTests
  14. {
  15. [Test]
  16. public void AssemblyLoadCalledWhenAssemblyNameStartsWithColon()
  17. {
  18. DerivedRuntime runtime = new DerivedRuntime(":ICSharpCode.SharpDevelop", String.Empty);
  19. runtime.Load();
  20. Assert.AreEqual("ICSharpCode.SharpDevelop", runtime.AssemblyNamePassedToLoadAssembly);
  21. }
  22. [Test]
  23. public void RuntimeLoadedAssemblyMatchesAssemblyReturnedFromLoadAssemblyMethod()
  24. {
  25. DerivedRuntime runtime = new DerivedRuntime(":ICSharpCode.SharpDevelop", String.Empty);
  26. runtime.AssemblyNames.Add("ICSharpCode.SharpDevelop", typeof(string).Assembly);
  27. Assembly loadedAssembly = runtime.LoadedAssembly;
  28. string expectedLoadedAssemblyName = "CommonLanguageRuntimeLibrary";
  29. Assert.AreEqual(expectedLoadedAssemblyName, loadedAssembly.ManifestModule.ToString());
  30. }
  31. [Test]
  32. public void AssemblyLoadCalledWhenAssemblyNameDoesNotStartWithColonOrDollar()
  33. {
  34. string hintPath = @"D:\SharpDevelop\AddIns\FormsDesigner";
  35. DerivedRuntime runtime = new DerivedRuntime("FormsDesigner.dll", hintPath);
  36. runtime.Load();
  37. string expectedFileName = @"D:\SharpDevelop\AddIns\FormsDesigner\FormsDesigner.dll";
  38. Assert.AreEqual(expectedFileName, runtime.AssemblyFileNamePassedToLoadAssemblyFrom);
  39. }
  40. [Test]
  41. public void RuntimeLoadedAssemblyMatchesAssemblyReturnedFromLoadAssemblyFromMethod()
  42. {
  43. DerivedRuntime runtime = new DerivedRuntime("MyAddIn.dll", @"d:\projects");
  44. runtime.AssemblyFileNames.Add(@"MyAddIn.dll", typeof(string).Assembly);
  45. Assembly loadedAssembly = runtime.LoadedAssembly;
  46. string expectedLoadedAssemblyName = "CommonLanguageRuntimeLibrary";
  47. Assert.AreEqual(expectedLoadedAssemblyName, loadedAssembly.ManifestModule.ToString());
  48. }
  49. [Test]
  50. public void AssemblyLoadFromCalledWhenAssemblyNameStartsWithDollar()
  51. {
  52. List<AddIn> addIns = GetAddInsList();
  53. DerivedRuntime runtime = new DerivedRuntime("$ICSharpCode.FormsDesigner/FormsDesigner.dll", String.Empty, addIns);
  54. runtime.Load();
  55. Assert.AreEqual(@"D:\SharpDevelop\AddIns\FormsDesigner\FormsDesigner.dll", runtime.AssemblyFileNamePassedToLoadAssemblyFrom);
  56. }
  57. List<AddIn> GetAddInsList()
  58. {
  59. AddIn formsDesignerAddIn = AddIn.Load(new StringReader(GetFormsDesignerAddInXml()));
  60. formsDesignerAddIn.FileName = @"D:\SharpDevelop\AddIns\FormsDesigner\FormsDesigner.addin";
  61. formsDesignerAddIn.Enabled = true;
  62. List<AddIn> addIns = new List<AddIn>();
  63. addIns.Add(formsDesignerAddIn);
  64. return addIns;
  65. }
  66. string GetFormsDesignerAddInXml()
  67. {
  68. return
  69. "<AddIn name = \"Forms Designer\"\r\n" +
  70. " author = \"Mike Krueger\"\r\n" +
  71. " copyright = \"prj:///doc/copyright.txt\"\r\n" +
  72. " description = \"Windows Forms Designer\"\r\n" +
  73. " addInManagerHidden = \"preinstalled\">\r\n" +
  74. "\r\n" +
  75. " <Manifest>\r\n" +
  76. " <Identity name = \"ICSharpCode.FormsDesigner\"/>\r\n" +
  77. " </Manifest>\r\n" +
  78. "\r\n" +
  79. " <Runtime>\r\n" +
  80. " <Import assembly = \"FormsDesigner.dll\"/>\r\n" +
  81. " <Import assembly = \":ICSharpCode.SharpDevelop\"/>\r\n" +
  82. " </Runtime>\r\n" +
  83. "</AddIn>";
  84. }
  85. [Test]
  86. public void CoreExceptionErrorMessageShownAssemblyNameStartsWithDollarButHasNoForwardSlashCharacter()
  87. {
  88. List<AddIn> addIns = GetAddInsList();
  89. DerivedRuntime runtime = new DerivedRuntime("$ICSharpCode.FormsDesigner.dll", String.Empty, addIns);
  90. CoreException ex = Assert.Throws<CoreException>(delegate { runtime.Load(); });
  91. Assert.AreEqual("Expected '/' in path beginning with '$'!", ex.Message);
  92. }
  93. [Test]
  94. public void ErrorMessageShownWhenAddInReferenceCannotBeFound()
  95. {
  96. List<AddIn> addIns = new List<AddIn>();
  97. DerivedRuntime runtime = new DerivedRuntime("$UnknownAddIn/Unknown.dll", String.Empty, addIns);
  98. runtime.Load();
  99. string expectedErrorMessageStart =
  100. "The addin '$UnknownAddIn/Unknown.dll' could not be loaded:\n" +
  101. "System.IO.FileNotFoundException: Could not find referenced AddIn UnknownAddIn";
  102. string errorMessage = runtime.ErrorMessageDisplayed;
  103. Assert.IsTrue(errorMessage.StartsWith(expectedErrorMessageStart), errorMessage);
  104. }
  105. [Test]
  106. public void ErrorMessageShownWhenLoadAssemblyFromThrowsFileLoadException()
  107. {
  108. List<AddIn> addIns = new List<AddIn>();
  109. DerivedRuntime runtime = new DerivedRuntime("Missing.dll", String.Empty, addIns);
  110. FileLoadException ex = new FileLoadException("Test");
  111. runtime.LoadAssemblyFromExceptionToThrow = ex;
  112. runtime.Load();
  113. string expectedErrorMessageStart =
  114. "The addin 'Missing.dll' could not be loaded:\n" +
  115. "System.IO.FileLoadException: Test";
  116. string errorMessage = runtime.ErrorMessageDisplayed;
  117. Assert.IsTrue(errorMessage.StartsWith(expectedErrorMessageStart), errorMessage);
  118. }
  119. }
  120. }