Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
385 changes: 204 additions & 181 deletions RubberduckTests/Inspections/AssignedByValParameterInspectionTests.cs
Original file line number Diff line number Diff line change
@@ -1,194 +1,217 @@
using System.Linq;
using System.Threading;
using Microsoft.Vbe.Interop;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
using Rubberduck.Inspections;
using Rubberduck.Parsing.VBA;
using Rubberduck.VBEditor.Extensions;
using Rubberduck.VBEditor.VBEHost;
using Rubberduck.VBEditor.VBEInterfaces.RubberduckCodePane;
using RubberduckTests.Mocks;

namespace RubberduckTests.Inspections
{
// [TestClass]
// public class AssignedByValParameterInspectionTests
// {
// [TestMethod]
// public void AssignedByValParameter_ReturnsResult_Sub()
// {
// const string inputCode =
//@"Public Sub Foo(ByVal arg1 As String)
// Let arg1 = ""test""
//End Sub";

// //Arrange
// var builder = new MockVbeBuilder();
// var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none)
// .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode)
// .Build().Object;

// var codePaneFactory = new CodePaneWrapperFactory();
// var mockHost = new Mock<IHostApplication>();
// mockHost.SetupAllProperties();
// var parseResult = new RubberduckParser().Parse(project);

// var inspection = new AssignedByValParameterInspection();
// var inspectionResults = inspection.GetInspectionResults(parseResult);

// Assert.AreEqual(1, inspectionResults.Count());
// }

// [TestMethod]
// public void AssignedByValParameter_ReturnsResult_Function()
// {
// const string inputCode =
//@"Function Foo(ByVal arg1 As Integer) As Boolean
// Let arg1 = 9
//End Function";

// //Arrange
// var builder = new MockVbeBuilder();
// var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none)
// .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode)
// .Build().Object;

// var codePaneFactory = new CodePaneWrapperFactory();
// var mockHost = new Mock<IHostApplication>();
// mockHost.SetupAllProperties();
// var parseResult = new RubberduckParser().Parse(project);

// var inspection = new AssignedByValParameterInspection();
// var inspectionResults = inspection.GetInspectionResults(parseResult);

// Assert.AreEqual(1, inspectionResults.Count());
// }

// [TestMethod]
// public void AssignedByValParameter_ReturnsResult_MultipleParams()
// {
// const string inputCode =
//@"Public Sub Foo(ByVal arg1 As String, ByVal arg2 As Integer)
// Let arg1 = ""test""
// Let arg2 = 9
//End Sub";

// //Arrange
// var builder = new MockVbeBuilder();
// var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none)
// .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode)
// .Build().Object;

// var codePaneFactory = new CodePaneWrapperFactory();
// var mockHost = new Mock<IHostApplication>();
// mockHost.SetupAllProperties();
// var parseResult = new RubberduckParser().Parse(project);

// var inspection = new AssignedByValParameterInspection();
// var inspectionResults = inspection.GetInspectionResults(parseResult);

// Assert.AreEqual(2, inspectionResults.Count());
// }

// [TestMethod]
// public void AssignedByValParameter_DoesNotReturnResult()
// {
// const string inputCode =
//@"Public Sub Foo(ByVal arg1 As String)
//End Sub";

// //Arrange
// var builder = new MockVbeBuilder();
// var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none)
// .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode)
// .Build().Object;

// var codePaneFactory = new CodePaneWrapperFactory();
// var mockHost = new Mock<IHostApplication>();
// mockHost.SetupAllProperties();
// var parseResult = new RubberduckParser().Parse(project);

// var inspection = new AssignedByValParameterInspection();
// var inspectionResults = inspection.GetInspectionResults(parseResult);

// Assert.AreEqual(0, inspectionResults.Count());
// }

// [TestMethod]
// public void AssignedByValParameter_ReturnsResult_SomeAssignedByValParams()
// {
// const string inputCode =
//@"Public Sub Foo(ByVal arg1 As String, ByVal arg2 As Integer)
// Let arg1 = ""test""
//
// Dim var1 As Integer
// var1 = arg2
//End Sub";

// //Arrange
// var builder = new MockVbeBuilder();
// var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none)
// .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode)
// .Build().Object;

// var codePaneFactory = new CodePaneWrapperFactory();
// var mockHost = new Mock<IHostApplication>();
// mockHost.SetupAllProperties();
// var parseResult = new RubberduckParser().Parse(project);

// var inspection = new AssignedByValParameterInspection();
// var inspectionResults = inspection.GetInspectionResults(parseResult);

// Assert.AreEqual(1, inspectionResults.Count());
// }

// [TestMethod]
// public void AssignedByValParameter_QuickFixWorks()
// {
// const string inputCode =
//@"Public Sub Foo(ByVal arg1 As String)
// Let arg1 = ""test""
//End Sub";

// const string expectedCode =
//@"Public Sub Foo(ByRef arg1 As String)
// Let arg1 = ""test""
//End Sub";

// //Arrange
// var builder = new MockVbeBuilder();
// var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none)
// .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode)
// .Build().Object;
// var module = project.VBComponents.Item(0).CodeModule;

// var codePaneFactory = new CodePaneWrapperFactory();
// var mockHost = new Mock<IHostApplication>();
// mockHost.SetupAllProperties();
// var parseResult = new RubberduckParser().Parse(project);

// var inspection = new AssignedByValParameterInspection();
// var inspectionResults = inspection.GetInspectionResults(parseResult);

// inspectionResults.First().QuickFixes.First().Fix();

// Assert.AreEqual(expectedCode, module.Lines());
// }

// [TestMethod]
// public void InspectionType()
// {
// var inspection = new AssignedByValParameterInspection();
// Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType);
// }

// [TestMethod]
// public void InspectionName()
// {
// const string inspectionName = "AssignedByValParameterInspection";
// var inspection = new AssignedByValParameterInspection();

// Assert.AreEqual(inspectionName, inspection.Name);
// }
// }
[TestClass]
public class AssignedByValParameterInspectionTests
{
private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(0, 1);

void State_StateChanged(object sender, ParserStateEventArgs e)
{
if (e.State == ParserState.Ready)
{
_semaphore.Release();
}
}

[TestMethod]
public void AssignedByValParameter_ReturnsResult_Sub()
{
const string inputCode =
@"Public Sub Foo(ByVal arg1 As String)
Let arg1 = ""test""
End Sub";

//Arrange
var builder = new MockVbeBuilder();
VBComponent component;
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
var mockHost = new Mock<IHostApplication>();
mockHost.SetupAllProperties();
var parseResult = new RubberduckParser(vbe.Object, new RubberduckParserState());

parseResult.State.StateChanged += State_StateChanged;
parseResult.State.OnParseRequested();
_semaphore.Wait();
parseResult.State.StateChanged -= State_StateChanged;

var inspection = new AssignedByValParameterInspection(parseResult.State);
var inspectionResults = inspection.GetInspectionResults();

Assert.AreEqual(1, inspectionResults.Count());
}

[TestMethod]
public void AssignedByValParameter_ReturnsResult_Function()
{
const string inputCode =
@"Function Foo(ByVal arg1 As Integer) As Boolean
Let arg1 = 9
End Function";

//Arrange
var builder = new MockVbeBuilder();
VBComponent component;
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
var mockHost = new Mock<IHostApplication>();
mockHost.SetupAllProperties();
var parseResult = new RubberduckParser(vbe.Object, new RubberduckParserState());

parseResult.State.StateChanged += State_StateChanged;
parseResult.State.OnParseRequested();
_semaphore.Wait();
parseResult.State.StateChanged -= State_StateChanged;

var inspection = new AssignedByValParameterInspection(parseResult.State);
var inspectionResults = inspection.GetInspectionResults();

Assert.AreEqual(1, inspectionResults.Count());
}

[TestMethod]
public void AssignedByValParameter_ReturnsResult_MultipleParams()
{
const string inputCode =
@"Public Sub Foo(ByVal arg1 As String, ByVal arg2 As Integer)
Let arg1 = ""test""
Let arg2 = 9
End Sub";

//Arrange
var builder = new MockVbeBuilder();
VBComponent component;
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
var mockHost = new Mock<IHostApplication>();
mockHost.SetupAllProperties();
var parseResult = new RubberduckParser(vbe.Object, new RubberduckParserState());

parseResult.State.StateChanged += State_StateChanged;
parseResult.State.OnParseRequested();
_semaphore.Wait();
parseResult.State.StateChanged -= State_StateChanged;

var inspection = new AssignedByValParameterInspection(parseResult.State);
var inspectionResults = inspection.GetInspectionResults();

Assert.AreEqual(2, inspectionResults.Count());
}

[TestMethod]
public void AssignedByValParameter_DoesNotReturnResult()
{
const string inputCode =
@"Public Sub Foo(ByVal arg1 As String)
End Sub";

//Arrange
var builder = new MockVbeBuilder();
VBComponent component;
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
var mockHost = new Mock<IHostApplication>();
mockHost.SetupAllProperties();
var parseResult = new RubberduckParser(vbe.Object, new RubberduckParserState());

parseResult.State.StateChanged += State_StateChanged;
parseResult.State.OnParseRequested();
_semaphore.Wait();
parseResult.State.StateChanged -= State_StateChanged;

var inspection = new AssignedByValParameterInspection(parseResult.State);
var inspectionResults = inspection.GetInspectionResults();

Assert.AreEqual(0, inspectionResults.Count());
}

[TestMethod]
public void AssignedByValParameter_ReturnsResult_SomeAssignedByValParams()
{
const string inputCode =
@"Public Sub Foo(ByVal arg1 As String, ByVal arg2 As Integer)
Let arg1 = ""test""

Dim var1 As Integer
var1 = arg2
End Sub";

//Arrange
var builder = new MockVbeBuilder();
VBComponent component;
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
var mockHost = new Mock<IHostApplication>();
mockHost.SetupAllProperties();
var parseResult = new RubberduckParser(vbe.Object, new RubberduckParserState());

parseResult.State.StateChanged += State_StateChanged;
parseResult.State.OnParseRequested();
_semaphore.Wait();
parseResult.State.StateChanged -= State_StateChanged;

var inspection = new AssignedByValParameterInspection(parseResult.State);
var inspectionResults = inspection.GetInspectionResults();

Assert.AreEqual(1, inspectionResults.Count());
}

[TestMethod]
public void AssignedByValParameter_QuickFixWorks()
{
const string inputCode =
@"Public Sub Foo(ByVal arg1 As String)
Let arg1 = ""test""
End Sub";

const string expectedCode =
@"Public Sub Foo(ByRef arg1 As String)
Let arg1 = ""test""
End Sub";

//Arrange
var builder = new MockVbeBuilder();
VBComponent component;
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
var project = vbe.Object.VBProjects.Item(0);
var module = project.VBComponents.Item(0).CodeModule;
var mockHost = new Mock<IHostApplication>();
mockHost.SetupAllProperties();
var parseResult = new RubberduckParser(vbe.Object, new RubberduckParserState());

parseResult.State.StateChanged += State_StateChanged;
parseResult.State.OnParseRequested();
_semaphore.Wait();
parseResult.State.StateChanged -= State_StateChanged;

var inspection = new AssignedByValParameterInspection(parseResult.State);
var inspectionResults = inspection.GetInspectionResults();

inspectionResults.First().QuickFixes.First().Fix();

Assert.AreEqual(expectedCode, module.Lines());
}

[TestMethod]
public void InspectionType()
{
var inspection = new AssignedByValParameterInspection(null);
Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType);
}

[TestMethod]
public void InspectionName()
{
const string inspectionName = "AssignedByValParameterInspection";
var inspection = new AssignedByValParameterInspection(null);

Assert.AreEqual(inspectionName, inspection.Name);
}
}
}
Loading