8 changed files with 351 additions and 356 deletions
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using ICSharpCode.NRefactory.CSharp; |
||||
using ICSharpCode.NRefactory.TypeSystem; |
||||
using ICSharpCode.PackageManagement.EnvDTE; |
||||
using ICSharpCode.SharpDevelop; |
||||
using ICSharpCode.SharpDevelop.Dom; |
||||
using ICSharpCode.SharpDevelop.Project; |
||||
using ICSharpCode.SharpDevelop.Refactoring; |
||||
using NUnit.Framework; |
||||
using Rhino.Mocks; |
||||
|
||||
namespace PackageManagement.Tests.EnvDTE |
||||
{ |
||||
public class CodeModelTestBase : CSharpModelTestBase |
||||
{ |
||||
protected CodeGenerator codeGenerator; |
||||
protected CodeModelContext codeModelContext; |
||||
protected string projectLanguage = "C#"; |
||||
|
||||
public override void SetUp() |
||||
{ |
||||
base.SetUp(); |
||||
project.Stub(p => p.Language).Return(null).WhenCalled(mi => mi.ReturnValue = projectLanguage); |
||||
codeGenerator = MockRepository.GenerateStrictMock<CodeGenerator>(); |
||||
codeModelContext = new CodeModelContext { |
||||
CodeGenerator = codeGenerator, |
||||
CurrentProject = project |
||||
}; |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,96 @@
@@ -0,0 +1,96 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.Collections.Specialized; |
||||
using System.Linq; |
||||
|
||||
using ICSharpCode.NRefactory.CSharp; |
||||
using ICSharpCode.NRefactory.TypeSystem; |
||||
using ICSharpCode.SharpDevelop.Parser; |
||||
using ICSharpCode.SharpDevelop.Project; |
||||
using NUnit.Framework; |
||||
using Rhino.Mocks; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Dom |
||||
{ |
||||
[TestFixture] |
||||
public class CSharpModelTestBase |
||||
{ |
||||
protected IProject project; |
||||
protected IProjectContent projectContent; |
||||
protected IEntityModelContext context; |
||||
protected ITypeDefinitionModelCollection topLevelTypeModels; |
||||
protected List<RemovedAndAddedPair<ITypeDefinitionModel>> topLevelChangeEventArgs = new List<RemovedAndAddedPair<ITypeDefinitionModel>>(); |
||||
|
||||
protected class RemovedAndAddedPair<T> |
||||
{ |
||||
public IReadOnlyCollection<T> OldItems { get; private set; } |
||||
public IReadOnlyCollection<T> NewItems { get; private set; } |
||||
|
||||
public RemovedAndAddedPair(IReadOnlyCollection<T> oldItems, IReadOnlyCollection<T> newItems) |
||||
{ |
||||
this.OldItems = oldItems; |
||||
this.NewItems = newItems; |
||||
} |
||||
} |
||||
|
||||
#region SetUp and other helper methods
|
||||
[SetUp] |
||||
public virtual void SetUp() |
||||
{ |
||||
SD.InitializeForUnitTests(); |
||||
SD.Services.AddStrictMockService<IParserService>(); |
||||
project = MockRepository.GenerateStrictMock<IProject>(); |
||||
projectContent = new CSharpProjectContent().AddAssemblyReferences(AssemblyLoader.Corlib); |
||||
context = new ProjectEntityModelContext(project, ".cs"); |
||||
topLevelTypeModels = new TopLevelTypeDefinitionModelCollection(context); |
||||
|
||||
SD.ParserService.Stub(p => p.GetCompilation(project)).WhenCalled(c => c.ReturnValue = projectContent.CreateCompilation()); |
||||
topLevelChangeEventArgs.Clear(); |
||||
topLevelTypeModels.CollectionChanged += (oldItems, newItems) => topLevelChangeEventArgs.Add(new RemovedAndAddedPair<ITypeDefinitionModel>(oldItems, newItems)); |
||||
} |
||||
|
||||
[TearDown] |
||||
public virtual void TearDown() |
||||
{ |
||||
SD.TearDownForUnitTests(); |
||||
} |
||||
|
||||
protected void AddCodeFile(string fileName, string code) |
||||
{ |
||||
var oldFile = projectContent.GetFile(fileName); |
||||
Assert.IsNull(oldFile, "Duplicate file name: " + fileName); |
||||
var newFile = Parse(fileName, code); |
||||
projectContent = projectContent.AddOrUpdateFiles(newFile); |
||||
topLevelTypeModels.Update(oldFile, newFile); |
||||
} |
||||
|
||||
IUnresolvedFile Parse(string fileName, string code) |
||||
{ |
||||
var parser = new CSharpParser(); |
||||
var syntaxTree = parser.Parse(code, fileName); |
||||
Assert.IsFalse(parser.HasErrors); |
||||
return syntaxTree.ToTypeSystem(); |
||||
} |
||||
|
||||
protected void UpdateCodeFile(string fileName, string code) |
||||
{ |
||||
var oldFile = projectContent.GetFile(fileName); |
||||
Assert.IsNotNull(oldFile, "Could not update file (missing old file): " + fileName); |
||||
var newFile = Parse(fileName, code); |
||||
projectContent = projectContent.AddOrUpdateFiles(newFile); |
||||
topLevelTypeModels.Update(oldFile, newFile); |
||||
} |
||||
|
||||
protected void RemoveCodeFile(string fileName) |
||||
{ |
||||
var oldFile = projectContent.GetFile(fileName); |
||||
Assert.IsNotNull(oldFile, "Could not remove file (missing old file): " + fileName); |
||||
projectContent = projectContent.RemoveFiles(fileName); |
||||
topLevelTypeModels.Update(oldFile, null); |
||||
} |
||||
#endregion
|
||||
} |
||||
} |
||||
Loading…
Reference in new issue