diff --git a/RubberduckTests/Inspections/AssignedByValParameterInspectionTests.cs b/RubberduckTests/Inspections/AssignedByValParameterInspectionTests.cs index 758f6baddc..3682aa027c 100644 --- a/RubberduckTests/Inspections/AssignedByValParameterInspectionTests.cs +++ b/RubberduckTests/Inspections/AssignedByValParameterInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,189 +7,211 @@ 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(); -// 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(); -// 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(); -// 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(); -// 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(); -// 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(); -// 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(); + 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(); + 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(); + 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(); + 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(); + 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(); + 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); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/ConstantNotUsedInspectionTests.cs b/RubberduckTests/Inspections/ConstantNotUsedInspectionTests.cs index accc7cac19..72f58267f6 100644 --- a/RubberduckTests/Inspections/ConstantNotUsedInspectionTests.cs +++ b/RubberduckTests/Inspections/ConstantNotUsedInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,171 +7,191 @@ 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 ConstantNotUsedInspectionTests -// { -// [TestMethod] -// public void ConstantNotUsed_ReturnsResult() -// { -// const string inputCode = -//@"Public Sub Foo() -// Const const1 As Integer = 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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ConstantNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ConstantNotUsed_ReturnsResult_MultipleConsts() -// { -// const string inputCode = -//@"Public Sub Foo() -// Const const1 As Integer = 9 -// Const const2 As String = ""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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ConstantNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ConstantNotUsed_DoesNotReturnResult() -// { -// const string inputCode = -//@"Public Sub Foo() -// Const const1 As Integer = 9 -// Goo const1 -//End Sub -// -//Public Sub Goo(ByVal arg1 As Integer) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ConstantNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ConstantNotUsed_ReturnsResult_SomeConstantsUsed() -// { -// const string inputCode = -//@"Public Sub Foo() -// Const const1 As Integer = 9 -// Goo const1 -// -// Const const2 As String = ""test"" -//End Sub -// -//Public Sub Goo(ByVal arg1 As Integer) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ConstantNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ConstantNotUsed_QuickFixWorks() -// { -// const string inputCode = -//@"Public Sub Foo() -// Const const1 As Integer = 9 -//End Sub"; - -// const string expectedCode = -//@"Public Sub Foo() -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ConstantNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// inspectionResults.First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new ConstantNotUsedInspection(); -// Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "ConstantNotUsedInspection"; -// var inspection = new ConstantNotUsedInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class ConstantNotUsedInspectionTests + { + 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 ConstantNotUsed_ReturnsResult() + { + const string inputCode = +@"Public Sub Foo() + Const const1 As Integer = 9 +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ConstantNotUsedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ConstantNotUsed_ReturnsResult_MultipleConsts() + { + const string inputCode = +@"Public Sub Foo() + Const const1 As Integer = 9 + Const const2 As String = ""test"" +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ConstantNotUsedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void ConstantNotUsed_DoesNotReturnResult() + { + const string inputCode = +@"Public Sub Foo() + Const const1 As Integer = 9 + Goo const1 +End Sub + +Public Sub Goo(ByVal arg1 As Integer) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ConstantNotUsedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ConstantNotUsed_ReturnsResult_SomeConstantsUsed() + { + const string inputCode = +@"Public Sub Foo() + Const const1 As Integer = 9 + Goo const1 + + Const const2 As String = ""test"" +End Sub + +Public Sub Goo(ByVal arg1 As Integer) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ConstantNotUsedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ConstantNotUsed_QuickFixWorks() + { + const string inputCode = +@"Public Sub Foo() + Const const1 As Integer = 9 +End Sub"; + + const string expectedCode = +@"Public Sub Foo() +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(); + 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 ConstantNotUsedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + inspectionResults.First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new ConstantNotUsedInspection(null); + Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "ConstantNotUsedInspection"; + var inspection = new ConstantNotUsedInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/DefaultProjectNameInspectionTests.cs b/RubberduckTests/Inspections/DefaultProjectNameInspectionTests.cs index f1dcb561c0..ac95115933 100644 --- a/RubberduckTests/Inspections/DefaultProjectNameInspectionTests.cs +++ b/RubberduckTests/Inspections/DefaultProjectNameInspectionTests.cs @@ -1,76 +1,96 @@ 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.VBEHost; -using Rubberduck.VBEditor.VBEInterfaces.RubberduckCodePane; using RubberduckTests.Mocks; namespace RubberduckTests.Inspections { -// [TestClass] - //public class DefaultProjectNameInspectionTests - //{ - // [TestMethod] - // public void DefaultProjectName_ReturnsResult() - // { - // const string inputCode = @""; - - // //Arrange - // var builder = new MockVbeBuilder(); - // var project = builder.ProjectBuilder("VBAProject", vbext_ProjectProtection.vbext_pp_none) - // .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode) - // .Build().Object; - - // var codePaneFactory = new CodePaneWrapperFactory(); - // var mockHost = new Mock(); - // mockHost.SetupAllProperties(); - // var parseResult = new RubberduckParser().Parse(project); - - // var inspection = new DefaultProjectNameInspection(); - // var inspectionResults = inspection.GetInspectionResults(parseResult); - - // Assert.AreEqual(1, inspectionResults.Count()); - // } - - // [TestMethod] - // public void DefaultProjectName_DoesNotReturnResult() - // { - // const string inputCode = @""; - - // //Arrange - // var builder = new MockVbeBuilder(); - // var project = builder.ProjectBuilder("TestProject", vbext_ProjectProtection.vbext_pp_none) - // .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode) - // .Build().Object; - - // var codePaneFactory = new CodePaneWrapperFactory(); - // var mockHost = new Mock(); - // mockHost.SetupAllProperties(); - // var parseResult = new RubberduckParser().Parse(project); - - // var inspection = new DefaultProjectNameInspection(); - // var inspectionResults = inspection.GetInspectionResults(parseResult); - - // Assert.AreEqual(0, inspectionResults.Count()); - // } - - // [TestMethod] - // public void InspectionType() - // { - // var inspection = new DefaultProjectNameInspection(); - // Assert.AreEqual(CodeInspectionType.MaintainabilityAndReadabilityIssues, inspection.InspectionType); - // } - - // [TestMethod] - // public void InspectionName() - // { - // const string inspectionName = "DefaultProjectNameInspection"; - // var inspection = new DefaultProjectNameInspection(); - - // Assert.AreEqual(inspectionName, inspection.Name); - // } - //} + [TestClass] + public class DefaultProjectNameInspectionTests + { + 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 DefaultProjectName_ReturnsResult() + { + const string inputCode = @""; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("VBAProject", vbext_ProjectProtection.vbext_pp_none) + .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + 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 DefaultProjectNameInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void DefaultProjectName_DoesNotReturnResult() + { + const string inputCode = @""; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("TestProject", vbext_ProjectProtection.vbext_pp_none) + .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + 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 DefaultProjectNameInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new DefaultProjectNameInspection(null); + Assert.AreEqual(CodeInspectionType.MaintainabilityAndReadabilityIssues, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "DefaultProjectNameInspection"; + var inspection = new DefaultProjectNameInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/ImplicitByRefParameterInspectionTests.cs b/RubberduckTests/Inspections/ImplicitByRefParameterInspectionTests.cs index 187de45454..c6c413fa33 100644 --- a/RubberduckTests/Inspections/ImplicitByRefParameterInspectionTests.cs +++ b/RubberduckTests/Inspections/ImplicitByRefParameterInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,234 +7,263 @@ 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 ImplicitByRefParameterInspectionTests -// { -// [TestMethod] -// public void ImplicitByRefParameter_ReturnsResult() -// { -// const string inputCode = -//@"Sub Foo(arg1 As Integer) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitByRefParameterInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ImplicitByRefParameter_ReturnsResult_MultipleParams() -// { -// const string inputCode = -//@"Sub Foo(arg1 As Integer, arg2 As Date) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitByRefParameterInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ImplicitByRefParameter_DoesNotReturnResult_ByRef() -// { -// const string inputCode = -//@"Sub Foo(ByRef arg1 As Integer) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitByRefParameterInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ImplicitByRefParameter_DoesNotReturnResult_ByVal() -// { -// const string inputCode = -//@"Sub Foo(ByVal arg1 As Integer) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitByRefParameterInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ImplicitByRefParameter_ReturnsResult_SomePassedByRefImplicitely() -// { -// const string inputCode = -//@"Sub Foo(ByVal arg1 As Integer, arg2 As Date) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitByRefParameterInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ImplicitByRefParameter_ReturnsResult_InterfaceImplementation() -// { -// //Input -// const string inputCode1 = -//@"Sub Foo(arg1 As Integer) -//End Sub"; -// const string inputCode2 = -//@"Implements IClass1 -// -//Sub IClass1_Foo(arg1 As Integer) -//End Sub"; - -// //Arrange -// var builder = new MockVbeBuilder(); -// var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) -// .AddComponent("IClass1", vbext_ComponentType.vbext_ct_ClassModule, inputCode1) -// .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode2) -// .Build().Object; - -// var codePaneFactory = new CodePaneWrapperFactory(); -// var mockHost = new Mock(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitByRefParameterInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ImplicitByRefParameter_QuickFixWorks_PassByRef() -// { -// const string inputCode = -//@"Sub Foo(arg1 As Integer) -//End Sub"; - -// const string expectedCode = -//@"Sub Foo(ByRef arg1 As Integer) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitByRefParameterInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// inspectionResults.First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void ImplicitByRefParameter_QuickFixWorks_ParamArrayMustBePassedByRef() -// { -// const string inputCode = -//@"Sub Foo(ParamArray arg1 As Integer) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitByRefParameterInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.First().QuickFixes.Count()); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new ImplicitByRefParameterInspection(); -// Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "ImplicitByRefParameterInspection"; -// var inspection = new ImplicitByRefParameterInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class ImplicitByRefParameterInspectionTests + { + 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 ImplicitByRefParameter_ReturnsResult() + { + const string inputCode = +@"Sub Foo(arg1 As Integer) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ImplicitByRefParameterInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ImplicitByRefParameter_ReturnsResult_MultipleParams() + { + const string inputCode = +@"Sub Foo(arg1 As Integer, arg2 As Date) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ImplicitByRefParameterInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void ImplicitByRefParameter_DoesNotReturnResult_ByRef() + { + const string inputCode = +@"Sub Foo(ByRef arg1 As Integer) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ImplicitByRefParameterInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ImplicitByRefParameter_DoesNotReturnResult_ByVal() + { + const string inputCode = +@"Sub Foo(ByVal arg1 As Integer) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ImplicitByRefParameterInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ImplicitByRefParameter_ReturnsResult_SomePassedByRefImplicitely() + { + const string inputCode = +@"Sub Foo(ByVal arg1 As Integer, arg2 As Date) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ImplicitByRefParameterInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ImplicitByRefParameter_ReturnsResult_InterfaceImplementation() + { + //Input + const string inputCode1 = +@"Sub Foo(arg1 As Integer) +End Sub"; + const string inputCode2 = +@"Implements IClass1 + +Sub IClass1_Foo(arg1 As Integer) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) + .AddComponent("IClass1", vbext_ComponentType.vbext_ct_ClassModule, inputCode1) + .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode2) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + 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 ImplicitByRefParameterInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ImplicitByRefParameter_QuickFixWorks_PassByRef() + { + const string inputCode = +@"Sub Foo(arg1 As Integer) +End Sub"; + + const string expectedCode = +@"Sub Foo(ByRef arg1 As Integer) +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(); + 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 ImplicitByRefParameterInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + inspectionResults.First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void ImplicitByRefParameter_QuickFixWorks_ParamArrayMustBePassedByRef() + { + const string inputCode = +@"Sub Foo(ParamArray arg1 As Integer) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ImplicitByRefParameterInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.First().QuickFixes.Count()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new ImplicitByRefParameterInspection(null); + Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "ImplicitByRefParameterInspection"; + var inspection = new ImplicitByRefParameterInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/ImplicitPublicMemberInspectionTests.cs b/RubberduckTests/Inspections/ImplicitPublicMemberInspectionTests.cs index 0d5c337d54..29107cf544 100644 --- a/RubberduckTests/Inspections/ImplicitPublicMemberInspectionTests.cs +++ b/RubberduckTests/Inspections/ImplicitPublicMemberInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,186 +7,208 @@ 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 ImplicitPublicMemberInspectionTests -// { -// [TestMethod] -// public void ImplicitPublicMember_ReturnsResult_Sub() -// { -// const string inputCode = -//@"Sub Foo() -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitPublicMemberInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ImplicitPublicMember_ReturnsResult_Function() -// { -// const string inputCode = -//@"Function Foo() As Boolean -// Foo = True -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitPublicMemberInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ImplicitPublicMember_ReturnsResult_MultipleSubs() -// { -// const string inputCode = -//@"Sub Foo() -//End Sub -// -//Sub Goo() -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitPublicMemberInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ImplicitPublicMember_DoesNotReturnResult() -// { -// const string inputCode = -//@"Private Sub Foo() -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitPublicMemberInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ImplicitPublicMember_ReturnsResult_SomeImplicitlyPublicSubs() -// { -// const string inputCode = -//@"Private Sub Foo() -//End Sub -// -//Sub Goo() -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitPublicMemberInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ImplicitPublicMember_QuickFixWorks() -// { -// const string inputCode = -//@"Sub Foo(ByVal arg1 as Integer) -//End Sub"; - -// const string expectedCode = -//@"Public Sub Foo(ByVal arg1 as Integer) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitPublicMemberInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// inspectionResults.First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new ImplicitPublicMemberInspection(); -// Assert.AreEqual(CodeInspectionType.MaintainabilityAndReadabilityIssues, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "ImplicitPublicMemberInspection"; -// var inspection = new ImplicitPublicMemberInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class ImplicitPublicMemberInspectionTests + { + 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 ImplicitPublicMember_ReturnsResult_Sub() + { + const string inputCode = +@"Sub Foo() +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ImplicitPublicMemberInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ImplicitPublicMember_ReturnsResult_Function() + { + const string inputCode = +@"Function Foo() As Boolean + Foo = True +End Function"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ImplicitPublicMemberInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ImplicitPublicMember_ReturnsResult_MultipleSubs() + { + const string inputCode = +@"Sub Foo() +End Sub + +Sub Goo() +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ImplicitPublicMemberInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void ImplicitPublicMember_DoesNotReturnResult() + { + const string inputCode = +@"Private Sub Foo() +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ImplicitPublicMemberInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ImplicitPublicMember_ReturnsResult_SomeImplicitlyPublicSubs() + { + const string inputCode = +@"Private Sub Foo() +End Sub + +Sub Goo() +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ImplicitPublicMemberInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ImplicitPublicMember_QuickFixWorks() + { + const string inputCode = +@"Sub Foo(ByVal arg1 as Integer) +End Sub"; + + const string expectedCode = +@"Public Sub Foo(ByVal arg1 as Integer) +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(); + 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 ImplicitPublicMemberInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + inspectionResults.First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new ImplicitPublicMemberInspection(null); + Assert.AreEqual(CodeInspectionType.MaintainabilityAndReadabilityIssues, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "ImplicitPublicMemberInspection"; + var inspection = new ImplicitPublicMemberInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/ImplicitVariantReturnTypeInspectionTests.cs b/RubberduckTests/Inspections/ImplicitVariantReturnTypeInspectionTests.cs index 7949528a03..92b72e6484 100644 --- a/RubberduckTests/Inspections/ImplicitVariantReturnTypeInspectionTests.cs +++ b/RubberduckTests/Inspections/ImplicitVariantReturnTypeInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,216 +7,241 @@ 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 ImplicitVariantReturnTypeInspectionTests -// { -// [TestMethod] -// public void ImplicitVariantReturnType_ReturnsResult_Function() -// { -// const string inputCode = -//@"Function Foo() -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitVariantReturnTypeInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ImplicitVariantReturnType_ReturnsResult_PropertyGet() -// { -// const string inputCode = -//@"Property Get Foo() -//End Property"; - -// //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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitVariantReturnTypeInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ImplicitVariantReturnType_ReturnsResult_MultipleFunctions() -// { -// const string inputCode = -//@"Function Foo() -//End Function -// -//Function Goo() -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitVariantReturnTypeInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ImplicitVariantReturnType_DoesNotReturnResult() -// { -// const string inputCode = -//@"Function Foo() As Boolean -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitVariantReturnTypeInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ImplicitVariantReturnType_ReturnsResult_MultipleSubs_SomeReturning() -// { -// const string inputCode = -//@"Function Foo() -//End Function -// -//Function Goo() As String -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitVariantReturnTypeInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ImplicitVariantReturnType_QuickFixWorks_Function() -// { -// const string inputCode = -//@"Function Foo() -//End Function"; - -// const string expectedCode = -//@"Function Foo() As Variant -//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 module = project.VBComponents.Item(0).CodeModule; - -// var codePaneFactory = new CodePaneWrapperFactory(); -// var mockHost = new Mock(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitVariantReturnTypeInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// inspectionResults.First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void ImplicitVariantReturnType_QuickFixWorks_PropertyGet() -// { -// const string inputCode = -//@"Property Get Foo() -//End Property"; - -// const string expectedCode = -//@"Property Get Foo() As Variant -//End Property"; - -// //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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ImplicitVariantReturnTypeInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// inspectionResults.First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new ImplicitVariantReturnTypeInspection(); -// Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "ImplicitVariantReturnTypeInspection"; -// var inspection = new ImplicitVariantReturnTypeInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class ImplicitVariantReturnTypeInspectionTests + { + 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 ImplicitVariantReturnType_ReturnsResult_Function() + { + const string inputCode = +@"Function Foo() +End Function"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ImplicitVariantReturnTypeInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ImplicitVariantReturnType_ReturnsResult_PropertyGet() + { + const string inputCode = +@"Property Get Foo() +End Property"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ImplicitVariantReturnTypeInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ImplicitVariantReturnType_ReturnsResult_MultipleFunctions() + { + const string inputCode = +@"Function Foo() +End Function + +Function Goo() +End Function"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ImplicitVariantReturnTypeInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void ImplicitVariantReturnType_DoesNotReturnResult() + { + const string inputCode = +@"Function Foo() As Boolean +End Function"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ImplicitVariantReturnTypeInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ImplicitVariantReturnType_ReturnsResult_MultipleSubs_SomeReturning() + { + const string inputCode = +@"Function Foo() +End Function + +Function Goo() As String +End Function"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ImplicitVariantReturnTypeInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ImplicitVariantReturnType_QuickFixWorks_Function() + { + const string inputCode = +@"Function Foo() +End Function"; + + const string expectedCode = +@"Function Foo() As Variant +End Function"; + + //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(); + 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 ImplicitVariantReturnTypeInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + inspectionResults.First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void ImplicitVariantReturnType_QuickFixWorks_PropertyGet() + { + const string inputCode = +@"Property Get Foo() +End Property"; + + const string expectedCode = +@"Property Get Foo() As Variant +End Property"; + + //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(); + 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 ImplicitVariantReturnTypeInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + inspectionResults.First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new ImplicitVariantReturnTypeInspection(null); + Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "ImplicitVariantReturnTypeInspection"; + var inspection = new ImplicitVariantReturnTypeInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/MultilineParameterInspectionTests.cs b/RubberduckTests/Inspections/MultilineParameterInspectionTests.cs index f1353d9886..cbc53f1be0 100644 --- a/RubberduckTests/Inspections/MultilineParameterInspectionTests.cs +++ b/RubberduckTests/Inspections/MultilineParameterInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,174 +7,194 @@ 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 MultilineParameterInspectionTests -// { -// [TestMethod] -// public void MultilineParameter_ReturnsResult() -// { -// const string inputCode = -//@"Public Sub Foo(ByVal _ -// Var1 _ -// As _ -// Integer) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new MultilineParameterInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void MultilineParameter_DoesNotReturnResult() -// { -// const string inputCode = -//@"Public Sub Foo(ByVal Var1 As Integer) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new MultilineParameterInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void MultilineParameter_ReturnsMultipleResults() -// { -// const string inputCode = -//@"Public Sub Foo( _ -// ByVal _ -// Var1 _ -// As _ -// Integer, _ -// ByVal _ -// Var2 _ -// As _ -// Date) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new MultilineParameterInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void MultilineParameter_ReturnsResults_SomeParams() -// { -// const string inputCode = -//@"Public Sub Foo(ByVal _ -// Var1 _ -// As _ -// Integer, ByVal Var2 As Date) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new MultilineParameterInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void MultilineParameter_QuickFixWorks() -// { -// const string inputCode = -//@"Public Sub Foo( _ -// ByVal _ -// Var1 _ -// As _ -// Integer) -//End Sub"; - -// const string expectedCode = -//@"Public Sub Foo( _ -// ByVal Var1 As Integer) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new MultilineParameterInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// inspectionResults.First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new MultilineParameterInspection(); -// Assert.AreEqual(CodeInspectionType.MaintainabilityAndReadabilityIssues, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "MultilineParameterInspection"; -// var inspection = new MultilineParameterInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class MultilineParameterInspectionTests + { + 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 MultilineParameter_ReturnsResult() + { + const string inputCode = +@"Public Sub Foo(ByVal _ + Var1 _ + As _ + Integer) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 MultilineParameterInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void MultilineParameter_DoesNotReturnResult() + { + const string inputCode = +@"Public Sub Foo(ByVal Var1 As Integer) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 MultilineParameterInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void MultilineParameter_ReturnsMultipleResults() + { + const string inputCode = +@"Public Sub Foo( _ + ByVal _ + Var1 _ + As _ + Integer, _ + ByVal _ + Var2 _ + As _ + Date) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 MultilineParameterInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void MultilineParameter_ReturnsResults_SomeParams() + { + const string inputCode = +@"Public Sub Foo(ByVal _ + Var1 _ + As _ + Integer, ByVal Var2 As Date) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 MultilineParameterInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void MultilineParameter_QuickFixWorks() + { + const string inputCode = +@"Public Sub Foo( _ + ByVal _ + Var1 _ + As _ + Integer) +End Sub"; + + const string expectedCode = +@"Public Sub Foo( _ + ByVal Var1 As Integer) +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(); + 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 MultilineParameterInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + inspectionResults.First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new MultilineParameterInspection(null); + Assert.AreEqual(CodeInspectionType.MaintainabilityAndReadabilityIssues, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "MultilineParameterInspection"; + var inspection = new MultilineParameterInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/MultipleDeclarationsInspectionTests.cs b/RubberduckTests/Inspections/MultipleDeclarationsInspectionTests.cs index d925be6d0b..8e6efdd95d 100644 --- a/RubberduckTests/Inspections/MultipleDeclarationsInspectionTests.cs +++ b/RubberduckTests/Inspections/MultipleDeclarationsInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,260 +7,288 @@ 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 MultipleDeclarationsInspectionTests -// { -// [TestMethod] -// public void MultipleDeclarations_ReturnsResult_Variables() -// { -// const string inputCode = -//@"Public Sub Foo() -// Dim var1 As Integer, var2 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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new MultipleDeclarationsInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void MultipleDeclarations_ReturnsResult_Constants() -// { -// const string inputCode = -//@"Public Sub Foo() -// Const var1 As Integer = 9, var2 As String = ""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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new MultipleDeclarationsInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void MultipleDeclarations_ReturnsResult_StaticVariables() -// { -// const string inputCode = -//@"Public Sub Foo() -// Static var1 As Integer, var2 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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new MultipleDeclarationsInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void MultipleDeclarations_ReturnsResult_MultipleDeclarations() -// { -// const string inputCode = -//@"Public Sub Foo() -// Dim var1 As Integer, var2 As String -// Dim var3 As Boolean, var4 As Date -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new MultipleDeclarationsInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void MultipleDeclarations_ReturnsResult_SomeDeclarationsSeparate() -// { -// const string inputCode = -//@"Public Sub Foo() -// Dim var1 As Integer, var2 As String -// Dim var3 As Boolean -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new MultipleDeclarationsInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void MultipleDeclarations_QuickFixWorks_Variables() -// { -// const string inputCode = -//@"Public Sub Foo() -// Dim var1 As Integer, var2 As String -//End Sub"; - -// const string expectedCode = -//@"Public Sub Foo() -//Dim var1 As Integer -//Dim var2 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 module = project.VBComponents.Item(0).CodeModule; - -// var codePaneFactory = new CodePaneWrapperFactory(); -// var mockHost = new Mock(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new MultipleDeclarationsInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// inspectionResults.First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void MultipleDeclarations_QuickFixWorks_Constants() -// { -// const string inputCode = -//@"Public Sub Foo() -// Const var1 As Integer = 9, var2 As String = ""test"" -//End Sub"; - -// const string expectedCode = -//@"Public Sub Foo() -//Const var1 As Integer = 9 -//Const var2 As String = ""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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new MultipleDeclarationsInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// inspectionResults.First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void MultipleDeclarations_QuickFixWorks_StaticVariables() -// { -// const string inputCode = -//@"Public Sub Foo() -// Static var1 As Integer, var2 As String -//End Sub"; - -// const string expectedCode = -//@"Public Sub Foo() -//Static var1 As Integer -//Static var2 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 module = project.VBComponents.Item(0).CodeModule; - -// var codePaneFactory = new CodePaneWrapperFactory(); -// var mockHost = new Mock(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new MultipleDeclarationsInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// inspectionResults.First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new MultipleDeclarationsInspection(); -// Assert.AreEqual(CodeInspectionType.MaintainabilityAndReadabilityIssues, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "MultipleDeclarationsInspection"; -// var inspection = new MultipleDeclarationsInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class MultipleDeclarationsInspectionTests + { + 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 MultipleDeclarations_ReturnsResult_Variables() + { + const string inputCode = +@"Public Sub Foo() + Dim var1 As Integer, var2 As String +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 MultipleDeclarationsInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void MultipleDeclarations_ReturnsResult_Constants() + { + const string inputCode = +@"Public Sub Foo() + Const var1 As Integer = 9, var2 As String = ""test"" +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 MultipleDeclarationsInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void MultipleDeclarations_ReturnsResult_StaticVariables() + { + const string inputCode = +@"Public Sub Foo() + Static var1 As Integer, var2 As String +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 MultipleDeclarationsInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void MultipleDeclarations_ReturnsResult_MultipleDeclarations() + { + const string inputCode = +@"Public Sub Foo() + Dim var1 As Integer, var2 As String + Dim var3 As Boolean, var4 As Date +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 MultipleDeclarationsInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void MultipleDeclarations_ReturnsResult_SomeDeclarationsSeparate() + { + const string inputCode = +@"Public Sub Foo() + Dim var1 As Integer, var2 As String + Dim var3 As Boolean +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 MultipleDeclarationsInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void MultipleDeclarations_QuickFixWorks_Variables() + { + const string inputCode = +@"Public Sub Foo() + Dim var1 As Integer, var2 As String +End Sub"; + + const string expectedCode = +@"Public Sub Foo() +Dim var1 As Integer +Dim var2 As String + +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(); + 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 MultipleDeclarationsInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + inspectionResults.First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void MultipleDeclarations_QuickFixWorks_Constants() + { + const string inputCode = +@"Public Sub Foo() + Const var1 As Integer = 9, var2 As String = ""test"" +End Sub"; + + const string expectedCode = +@"Public Sub Foo() +Const var1 As Integer = 9 +Const var2 As String = ""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(); + 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 MultipleDeclarationsInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + inspectionResults.First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void MultipleDeclarations_QuickFixWorks_StaticVariables() + { + const string inputCode = +@"Public Sub Foo() + Static var1 As Integer, var2 As String +End Sub"; + + const string expectedCode = +@"Public Sub Foo() +Static var1 As Integer +Static var2 As String + +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(); + 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 MultipleDeclarationsInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + inspectionResults.First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new MultipleDeclarationsInspection(null); + Assert.AreEqual(CodeInspectionType.MaintainabilityAndReadabilityIssues, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "MultipleDeclarationsInspection"; + var inspection = new MultipleDeclarationsInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/NonReturningFunctionInspectionTests.cs b/RubberduckTests/Inspections/NonReturningFunctionInspectionTests.cs index d5104701c9..edf5404a53 100644 --- a/RubberduckTests/Inspections/NonReturningFunctionInspectionTests.cs +++ b/RubberduckTests/Inspections/NonReturningFunctionInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,225 +7,255 @@ 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 NonReturningFunctionInspectionTests -// { -// [TestMethod] -// public void NonReturningFunction_ReturnsResult() -// { -// const string inputCode = -//@"Function Foo() As Boolean -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new NonReturningFunctionInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void NonReturningFunction_ReturnsResult_MultipleFunctions() -// { -// const string inputCode = -//@"Function Foo() As Boolean -//End Function -// -//Function Goo() As String -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new NonReturningFunctionInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void NonReturningFunction_DoesNotReturnResult() -// { -// const string inputCode = -//@"Function Foo() As Boolean -// Foo = True -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new NonReturningFunctionInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void NonReturningFunction_ReturnsResult_MultipleSubs_SomeReturning() -// { -// const string inputCode = -//@"Function Foo() As Boolean -// Foo = True -//End Function -// -//Function Goo() As String -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new NonReturningFunctionInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void NonReturningFunction_ReturnsResult_InterfaceImplementation() -// { -// //Input -// const string inputCode1 = -//@"Function Foo() As Boolean -//End Function"; -// const string inputCode2 = -//@"Implements IClass1 -// -//Function IClass1_Foo() As Boolean -//End Function"; - -// //Arrange -// var builder = new MockVbeBuilder(); -// var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) -// .AddComponent("IClass1", vbext_ComponentType.vbext_ct_ClassModule, inputCode1) -// .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode2) -// .Build().Object; - -// var codePaneFactory = new CodePaneWrapperFactory(); -// var mockHost = new Mock(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new NonReturningFunctionInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void NonReturningFunction_QuickFixWorks() -// { -// const string inputCode = -//@"Function Foo() As Boolean -//End Function"; - -// const string expectedCode = -//@"Sub Foo() -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new NonReturningFunctionInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// inspectionResults.First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void NonReturningFunction_ReturnsResult_InterfaceImplementation_NoQuickFix() -// { -// //Input -// const string inputCode1 = -//@"Function Foo() As Boolean -//End Function"; -// const string inputCode2 = -//@"Implements IClass1 -// -//Function IClass1_Foo() As Boolean -//End Function"; - -// //Arrange -// var builder = new MockVbeBuilder(); -// var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) -// .AddComponent("IClass1", vbext_ComponentType.vbext_ct_ClassModule, inputCode1) -// .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode2) -// .Build().Object; - -// var codePaneFactory = new CodePaneWrapperFactory(); -// var mockHost = new Mock(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new NonReturningFunctionInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.First().QuickFixes.Count()); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new NonReturningFunctionInspection(); -// Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "NonReturningFunctionInspection"; -// var inspection = new NonReturningFunctionInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class NonReturningFunctionInspectionTests + { + 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 NonReturningFunction_ReturnsResult() + { + const string inputCode = +@"Function Foo() As Boolean +End Function"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 NonReturningFunctionInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void NonReturningFunction_ReturnsResult_MultipleFunctions() + { + const string inputCode = +@"Function Foo() As Boolean +End Function + +Function Goo() As String +End Function"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 NonReturningFunctionInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void NonReturningFunction_DoesNotReturnResult() + { + const string inputCode = +@"Function Foo() As Boolean + Foo = True +End Function"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 NonReturningFunctionInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void NonReturningFunction_ReturnsResult_MultipleSubs_SomeReturning() + { + const string inputCode = +@"Function Foo() As Boolean + Foo = True +End Function + +Function Goo() As String +End Function"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 NonReturningFunctionInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void NonReturningFunction_ReturnsResult_InterfaceImplementation() + { + //Input + const string inputCode1 = +@"Function Foo() As Boolean +End Function"; + const string inputCode2 = +@"Implements IClass1 + +Function IClass1_Foo() As Boolean +End Function"; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) + .AddComponent("IClass1", vbext_ComponentType.vbext_ct_ClassModule, inputCode1) + .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode2) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + 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 NonReturningFunctionInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void NonReturningFunction_QuickFixWorks() + { + const string inputCode = +@"Function Foo() As Boolean +End Function"; + + const string expectedCode = +@"Sub Foo() +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(); + 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 NonReturningFunctionInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + inspectionResults.First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void NonReturningFunction_ReturnsResult_InterfaceImplementation_NoQuickFix() + { + //Input + const string inputCode1 = +@"Function Foo() As Boolean +End Function"; + const string inputCode2 = +@"Implements IClass1 + +Function IClass1_Foo() As Boolean +End Function"; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) + .AddComponent("IClass1", vbext_ComponentType.vbext_ct_ClassModule, inputCode1) + .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode2) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + 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 NonReturningFunctionInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.First().QuickFixes.Count()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new NonReturningFunctionInspection(null); + Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "NonReturningFunctionInspection"; + var inspection = new NonReturningFunctionInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/ObsoleteCallStatementInspectionTests.cs b/RubberduckTests/Inspections/ObsoleteCallStatementInspectionTests.cs index f8a7e6fcac..2d9833d385 100644 --- a/RubberduckTests/Inspections/ObsoleteCallStatementInspectionTests.cs +++ b/RubberduckTests/Inspections/ObsoleteCallStatementInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,181 +7,201 @@ 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 ObsoleteCallStatementInspectionTests -// { -// [TestMethod] -// public void ObsoleteCallStatement_ReturnsResult() -// { -// const string inputCode = -//@"Sub Foo() -// Call Foo -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteCallStatementInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ObsoleteCallStatement_DoesNotReturnResult() -// { -// const string inputCode = -//@"Sub Foo() -// Foo -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteCallStatementInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ObsoleteCallStatement_ReturnsMultipleResults() -// { -// const string inputCode = -//@"Sub Foo() -// Call Goo(1, ""test"") -//End Sub -// -//Sub Goo(arg1 As Integer, arg1 As String) -// Call Foo -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteCallStatementInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ObsoleteCallStatement_ReturnsResults_SomeObsoleteCallStatements() -// { -// const string inputCode = -//@"Sub Foo() -// Call Goo(1, ""test"") -//End Sub -// -//Sub Goo(arg1 As Integer, arg1 As String) -// Foo -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteCallStatementInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ObsoleteCallStatement_QuickFixWorks_RemoveCallStatement() -// { -// const string inputCode = -//@"Sub Foo() -// Call Goo(1, ""test"") -//End Sub -// -//Sub Goo(arg1 As Integer, arg1 As String) -// Call Foo -//End Sub"; - -// const string expectedCode = -//@"Sub Foo() -// Goo 1, ""test"" -//End Sub -// -//Sub Goo(arg1 As Integer, arg1 As String) -// Foo -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteCallStatementInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// foreach (var inspectionResult in inspectionResults) -// { -// inspectionResult.QuickFixes.First().Fix(); -// } - -// var actual = module.Lines(); -// Assert.AreEqual(expectedCode, actual); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new ObsoleteCallStatementInspection(); -// Assert.AreEqual(CodeInspectionType.LanguageOpportunities, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "ObsoleteCallStatementInspection"; -// var inspection = new ObsoleteCallStatementInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class ObsoleteCallStatementInspectionTests + { + 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 ObsoleteCallStatement_ReturnsResult() + { + const string inputCode = +@"Sub Foo() + Call Foo +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ObsoleteCallStatementInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ObsoleteCallStatement_DoesNotReturnResult() + { + const string inputCode = +@"Sub Foo() + Foo +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ObsoleteCallStatementInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ObsoleteCallStatement_ReturnsMultipleResults() + { + const string inputCode = +@"Sub Foo() + Call Goo(1, ""test"") +End Sub + +Sub Goo(arg1 As Integer, arg1 As String) + Call Foo +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ObsoleteCallStatementInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void ObsoleteCallStatement_ReturnsResults_SomeObsoleteCallStatements() + { + const string inputCode = +@"Sub Foo() + Call Goo(1, ""test"") +End Sub + +Sub Goo(arg1 As Integer, arg1 As String) + Foo +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ObsoleteCallStatementInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ObsoleteCallStatement_QuickFixWorks_RemoveCallStatement() + { + const string inputCode = +@"Sub Foo() + Call Goo(1, ""test"") +End Sub + +Sub Goo(arg1 As Integer, arg1 As String) + Call Foo +End Sub"; + + const string expectedCode = +@"Sub Foo() + Goo 1, ""test"" +End Sub + +Sub Goo(arg1 As Integer, arg1 As String) + Foo +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(); + 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 ObsoleteCallStatementInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + foreach (var inspectionResult in inspectionResults) + { + inspectionResult.QuickFixes.First().Fix(); + } + + var actual = module.Lines(); + Assert.AreEqual(expectedCode, actual); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new ObsoleteCallStatementInspection(null); + Assert.AreEqual(CodeInspectionType.LanguageOpportunities, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "ObsoleteCallStatementInspection"; + var inspection = new ObsoleteCallStatementInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/ObsoleteCommentSyntaxInspectionTests.cs b/RubberduckTests/Inspections/ObsoleteCommentSyntaxInspectionTests.cs index 18a6a87013..e8cba6c982 100644 --- a/RubberduckTests/Inspections/ObsoleteCommentSyntaxInspectionTests.cs +++ b/RubberduckTests/Inspections/ObsoleteCommentSyntaxInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,178 +7,201 @@ 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 ObsoleteCommentSyntaxInspectionTests -// { -// [TestMethod] -// public void ObsoleteCommentSyntax_ReturnsResult() -// { -// const string inputCode = @"Rem test"; - -// //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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteCommentSyntaxInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ObsoleteCommentSyntax_DoesNotReturnResult() -// { -// const string inputCode = @"' test"; - -// //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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteCommentSyntaxInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ObsoleteCommentSyntax_ReturnsMultipleResults() -// { -// const string inputCode = -//@"Rem test1 -//Rem test2"; - -// //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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteCommentSyntaxInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ObsoleteCommentSyntax_ReturnsResults_SomeObsoleteCommentSyntax() -// { -// const string inputCode = -//@"Rem test1 -//' test2"; - -// //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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteCommentSyntaxInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ObsoleteCommentSyntax_QuickFixWorks_UpdateComment() -// { -// const string inputCode = -//@"Rem test1"; - -// const string expectedCode = -//@"' test1"; - -// //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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteCommentSyntaxInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// inspectionResults.First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void ObsoleteCommentSyntax_QuickFixWorks_RemoveComment() -// { -// const string inputCode = -//@"Rem test1"; - -// const string expectedCode = -//@""; - -// //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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteCommentSyntaxInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// inspectionResults.First().QuickFixes.ElementAt(1).Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new ObsoleteCommentSyntaxInspection(); -// Assert.AreEqual(CodeInspectionType.LanguageOpportunities, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "ObsoleteCommentSyntaxInspection"; -// var inspection = new ObsoleteCommentSyntaxInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class ObsoleteCommentSyntaxInspectionTests + { + 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 ObsoleteCommentSyntax_ReturnsResult() + { + const string inputCode = @"Rem test"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ObsoleteCommentSyntaxInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ObsoleteCommentSyntax_DoesNotReturnResult() + { + const string inputCode = @"' test"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ObsoleteCommentSyntaxInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ObsoleteCommentSyntax_ReturnsMultipleResults() + { + const string inputCode = +@"Rem test1 +Rem test2"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ObsoleteCommentSyntaxInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void ObsoleteCommentSyntax_ReturnsResults_SomeObsoleteCommentSyntax() + { + const string inputCode = +@"Rem test1 +' test2"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ObsoleteCommentSyntaxInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ObsoleteCommentSyntax_QuickFixWorks_UpdateComment() + { + const string inputCode = +@"Rem test1"; + + const string expectedCode = +@"' test1"; + + //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(); + 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 ObsoleteCommentSyntaxInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + inspectionResults.First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void ObsoleteCommentSyntax_QuickFixWorks_RemoveComment() + { + const string inputCode = +@"Rem test1"; + + const string expectedCode = +@""; + + //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(); + 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 ObsoleteCommentSyntaxInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + inspectionResults.First().QuickFixes.ElementAt(1).Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new ObsoleteCommentSyntaxInspection(null); + Assert.AreEqual(CodeInspectionType.LanguageOpportunities, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "ObsoleteCommentSyntaxInspection"; + var inspection = new ObsoleteCommentSyntaxInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/ObsoleteGlobalInspectionTests.cs b/RubberduckTests/Inspections/ObsoleteGlobalInspectionTests.cs index d9392f2bad..835b312daa 100644 --- a/RubberduckTests/Inspections/ObsoleteGlobalInspectionTests.cs +++ b/RubberduckTests/Inspections/ObsoleteGlobalInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,151 +7,171 @@ 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 ObsoleteGlobalInspectionTests -// { -// [TestMethod] -// public void ObsoleteGlobal_ReturnsResult() -// { -// const string inputCode = -//@"Global var1 As Integer"; - -// //Arrange -// var builder = new MockVbeBuilder(); -// var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) -// .AddComponent("Class1", vbext_ComponentType.vbext_ct_StdModule, inputCode) -// .Build().Object; - -// var codePaneFactory = new CodePaneWrapperFactory(); -// var mockHost = new Mock(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteGlobalInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ObsoleteGlobal_ReturnsResult_MultipleGlobals() -// { -// const string inputCode = -//@"Global var1 As Integer -//Global var2 As String"; - -// //Arrange -// var builder = new MockVbeBuilder(); -// var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) -// .AddComponent("Class1", vbext_ComponentType.vbext_ct_StdModule, inputCode) -// .Build().Object; - -// var codePaneFactory = new CodePaneWrapperFactory(); -// var mockHost = new Mock(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteGlobalInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ObsoleteGlobal_DoesNotReturnResult() -// { -// const string inputCode = -//@"Public var1 As Integer"; - -// //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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteGlobalInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ObsoleteGlobal_ReturnsResult_SomeConstantsUsed() -// { -// const string inputCode = -//@"Public var1 As Integer -//Global var2 As Date"; - -// //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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteGlobalInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ObsoleteGlobal_QuickFixWorks() -// { -// const string inputCode = -//@"Global var1 As Integer"; - -// const string expectedCode = -//@"Public var1 As Integer"; - -// //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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteGlobalInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// inspectionResults.First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new ObsoleteGlobalInspection(); -// Assert.AreEqual(CodeInspectionType.LanguageOpportunities, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "ObsoleteGlobalInspection"; -// var inspection = new ObsoleteGlobalInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class ObsoleteGlobalInspectionTests + { + 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 ObsoleteGlobal_ReturnsResult() + { + const string inputCode = +@"Global var1 As Integer"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ObsoleteGlobalInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ObsoleteGlobal_ReturnsResult_MultipleGlobals() + { + const string inputCode = +@"Global var1 As Integer +Global var2 As String"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ObsoleteGlobalInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void ObsoleteGlobal_DoesNotReturnResult() + { + const string inputCode = +@"Public var1 As Integer"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ObsoleteGlobalInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ObsoleteGlobal_ReturnsResult_SomeConstantsUsed() + { + const string inputCode = +@"Public var1 As Integer +Global var2 As Date"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ObsoleteGlobalInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ObsoleteGlobal_QuickFixWorks() + { + const string inputCode = +@"Global var1 As Integer"; + + const string expectedCode = +@"Public var1 As Integer"; + + //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(); + 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 ObsoleteGlobalInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + inspectionResults.First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new ObsoleteGlobalInspection(null); + Assert.AreEqual(CodeInspectionType.LanguageOpportunities, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "ObsoleteGlobalInspection"; + var inspection = new ObsoleteGlobalInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/ObsoleteLetStatementInspectionTests.cs b/RubberduckTests/Inspections/ObsoleteLetStatementInspectionTests.cs index e69b5e5968..38ed87d30b 100644 --- a/RubberduckTests/Inspections/ObsoleteLetStatementInspectionTests.cs +++ b/RubberduckTests/Inspections/ObsoleteLetStatementInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,181 +7,201 @@ 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 ObsoleteLetStatementInspectionTests -// { -// [TestMethod] -// public void ObsoleteLetStatement_ReturnsResult() -// { -// const string inputCode = -//@"Public Sub Foo() -// Dim var1 As Integer -// Dim var2 As Integer -// -// Let var2 = var1 -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteLetStatementInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ObsoleteLetStatement_ReturnsResult_MultipleLets() -// { -// const string inputCode = -//@"Public Sub Foo() -// Dim var1 As Integer -// Dim var2 As Integer -// -// Let var2 = var1 -// Let var1 = var2 -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteLetStatementInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ObsoleteLetStatement_DoesNotReturnResult() -// { -// const string inputCode = -//@"Public Sub Foo() -// Dim var1 As Integer -// Dim var2 As Integer -// -// var2 = var1 -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteLetStatementInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ObsoleteLetStatement_ReturnsResult_SomeConstantsUsed() -// { -// const string inputCode = -//@"Public Sub Foo() -// Dim var1 As Integer -// Dim var2 As Integer -// -// Let var2 = var1 -// var1 = var2 -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteLetStatementInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ObsoleteLetStatement_QuickFixWorks() -// { -// const string inputCode = -//@"Public Sub Foo() -// Dim var1 As Integer -// Dim var2 As Integer -// -// Let var2 = var1 -//End Sub"; - -// const string expectedCode = -//@"Public Sub Foo() -// Dim var1 As Integer -// Dim var2 As Integer -// -// var2 = var1 -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ObsoleteLetStatementInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// inspectionResults.First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new ObsoleteLetStatementInspection(); -// Assert.AreEqual(CodeInspectionType.LanguageOpportunities, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "ObsoleteLetStatementInspection"; -// var inspection = new ObsoleteLetStatementInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class ObsoleteLetStatementInspectionTests + { + 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 ObsoleteLetStatement_ReturnsResult() + { + const string inputCode = +@"Public Sub Foo() + Dim var1 As Integer + Dim var2 As Integer + + Let var2 = var1 +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ObsoleteLetStatementInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ObsoleteLetStatement_ReturnsResult_MultipleLets() + { + const string inputCode = +@"Public Sub Foo() + Dim var1 As Integer + Dim var2 As Integer + + Let var2 = var1 + Let var1 = var2 +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ObsoleteLetStatementInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void ObsoleteLetStatement_DoesNotReturnResult() + { + const string inputCode = +@"Public Sub Foo() + Dim var1 As Integer + Dim var2 As Integer + + var2 = var1 +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ObsoleteLetStatementInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ObsoleteLetStatement_ReturnsResult_SomeConstantsUsed() + { + const string inputCode = +@"Public Sub Foo() + Dim var1 As Integer + Dim var2 As Integer + + Let var2 = var1 + var1 = var2 +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ObsoleteLetStatementInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ObsoleteLetStatement_QuickFixWorks() + { + const string inputCode = +@"Public Sub Foo() + Dim var1 As Integer + Dim var2 As Integer + + Let var2 = var1 +End Sub"; + + const string expectedCode = +@"Public Sub Foo() + Dim var1 As Integer + Dim var2 As Integer + + var2 = var1 +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(); + 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 ObsoleteLetStatementInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + inspectionResults.First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new ObsoleteLetStatementInspection(null); + Assert.AreEqual(CodeInspectionType.LanguageOpportunities, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "ObsoleteLetStatementInspection"; + var inspection = new ObsoleteLetStatementInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/OptionExplicitInspectionTests.cs b/RubberduckTests/Inspections/OptionExplicitInspectionTests.cs index 76c31460c3..d0b9f1492e 100644 --- a/RubberduckTests/Inspections/OptionExplicitInspectionTests.cs +++ b/RubberduckTests/Inspections/OptionExplicitInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,148 +7,174 @@ 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 OptionExplicitInspectionTests -// { -// [TestMethod] -// public void NotAlreadySpecified_ReturnsResult() -// { -// const string inputCode = @""; - -// //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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new OptionExplicitInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void AlreadySpecified_DoesNotReturnResult() -// { -// const string inputCode = @"Option Explicit"; - -// //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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new OptionExplicitInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void NotAlreadySpecified_ReturnsMultipleResults() -// { -// const string inputCode = @""; - -// //Arrange -// var builder = new MockVbeBuilder(); -// var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) -// .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode) -// .AddComponent("Class2", vbext_ComponentType.vbext_ct_ClassModule, inputCode) -// .Build().Object; - -// var codePaneFactory = new CodePaneWrapperFactory(); -// var mockHost = new Mock(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new OptionExplicitInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void PartiallySpecified_ReturnsResults() -// { -// const string inputCode1 = @""; -// const string inputCode2 = @"Option Explicit"; - -// //Arrange -// var builder = new MockVbeBuilder(); -// var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) -// .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode1) -// .AddComponent("Class2", vbext_ComponentType.vbext_ct_ClassModule, inputCode2) -// .Build().Object; - -// var codePaneFactory = new CodePaneWrapperFactory(); -// var mockHost = new Mock(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new OptionExplicitInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void NotAlreadySpecified_QuickFixWorks() -// { -// const string inputCode = @""; -// const string expectedCode = -//@"Option Explicit -// -//"; - -// //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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new OptionExplicitInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// inspectionResults.First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new OptionExplicitInspection(); -// Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "OptionExplicitInspection"; -// var inspection = new OptionExplicitInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class OptionExplicitInspectionTests + { + 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 NotAlreadySpecified_ReturnsResult() + { + const string inputCode = @""; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 OptionExplicitInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void AlreadySpecified_DoesNotReturnResult() + { + const string inputCode = @"Option Explicit"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 OptionExplicitInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void NotAlreadySpecified_ReturnsMultipleResults() + { + const string inputCode = @""; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) + .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode) + .AddComponent("Class2", vbext_ComponentType.vbext_ct_ClassModule, inputCode) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + 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 OptionExplicitInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void PartiallySpecified_ReturnsResults() + { + const string inputCode1 = @""; + const string inputCode2 = @"Option Explicit"; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) + .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode1) + .AddComponent("Class2", vbext_ComponentType.vbext_ct_ClassModule, inputCode2) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + 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 OptionExplicitInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void NotAlreadySpecified_QuickFixWorks() + { + const string inputCode = @""; + const string expectedCode = +@"Option Explicit + +"; + + //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(); + 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 OptionExplicitInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + inspectionResults.First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new OptionExplicitInspection(null); + Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "OptionExplicitInspection"; + var inspection = new OptionExplicitInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/ParameterCanBeByValInspectionTests.cs b/RubberduckTests/Inspections/ParameterCanBeByValInspectionTests.cs index 20ee133656..ce0cbae633 100644 --- a/RubberduckTests/Inspections/ParameterCanBeByValInspectionTests.cs +++ b/RubberduckTests/Inspections/ParameterCanBeByValInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,231 +7,258 @@ 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 ParameterCanBeByValInspectionTests -// { -// [TestMethod] -// public void ParameterCanByByVal_ReturnsResult_PassedByNotSpecified() -// { -// const string inputCode = -//@"Sub Foo(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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ParameterCanBeByValInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ParameterCanByByVal_ReturnsResult_PassedByRef_Unassigned() -// { -// const string inputCode = -//@"Sub Foo(ByRef 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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ParameterCanBeByValInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ParameterCanByByVal_ReturnsResult_Multiple() -// { -// const string inputCode = -//@"Sub Foo(arg1 As String, arg2 As Date) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ParameterCanBeByValInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ParameterCanByByVal_DoesNotReturnResult_PassedByValExplicitly() -// { -// const string inputCode = -//@"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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ParameterCanBeByValInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ParameterCanByByVal_DoesNotReturnResult_PassedByRefAndAssigned() -// { -// const string inputCode = -//@"Sub Foo(ByRef arg1 As String) -// 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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ParameterCanBeByValInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ParameterCanByByVal_ReturnsResult_SomeParams() -// { -// const string inputCode = -//@"Sub Foo(arg1 As String, ByVal arg2 As Integer) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ParameterCanBeByValInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ParameterCanByByVal_ReturnsResult_QuickFixWorks_PassedByUnspecified() -// { -// const string inputCode = -//@"Sub Foo(arg1 As String) -//End Sub"; - -// const string expectedCode = -//@"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 module = project.VBComponents.Item(0).CodeModule; - -// var codePaneFactory = new CodePaneWrapperFactory(); -// var mockHost = new Mock(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ParameterCanBeByValInspection(); -// inspection.GetInspectionResults(parseResult).First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void ParameterCanByByVal_ReturnsResult_QuickFixWorks_PassedByRefUnassigned() -// { -// const string inputCode = -//@"Sub Foo(arg1 As String) -//End Sub"; - -// const string expectedCode = -//@"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 module = project.VBComponents.Item(0).CodeModule; - -// var codePaneFactory = new CodePaneWrapperFactory(); -// var mockHost = new Mock(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ParameterCanBeByValInspection(); -// inspection.GetInspectionResults(parseResult).First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new ParameterCanBeByValInspection(); -// Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "ParameterCanBeByValInspection"; -// var inspection = new ParameterCanBeByValInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class ParameterCanBeByValInspectionTests + { + 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 ParameterCanByByVal_ReturnsResult_PassedByNotSpecified() + { + const string inputCode = +@"Sub Foo(arg1 As String) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ParameterCanBeByValInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ParameterCanByByVal_ReturnsResult_PassedByRef_Unassigned() + { + const string inputCode = +@"Sub Foo(ByRef arg1 As String) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ParameterCanBeByValInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ParameterCanByByVal_ReturnsResult_Multiple() + { + const string inputCode = +@"Sub Foo(arg1 As String, arg2 As Date) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ParameterCanBeByValInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void ParameterCanByByVal_DoesNotReturnResult_PassedByValExplicitly() + { + const string inputCode = +@"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(); + 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 ParameterCanBeByValInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ParameterCanByByVal_DoesNotReturnResult_PassedByRefAndAssigned() + { + const string inputCode = +@"Sub Foo(ByRef arg1 As String) + arg1 = ""test"" +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ParameterCanBeByValInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ParameterCanByByVal_ReturnsResult_SomeParams() + { + const string inputCode = +@"Sub Foo(arg1 As String, ByVal arg2 As Integer) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ParameterCanBeByValInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ParameterCanByByVal_ReturnsResult_QuickFixWorks_PassedByUnspecified() + { + const string inputCode = +@"Sub Foo(arg1 As String) +End Sub"; + + const string expectedCode = +@"Sub Foo(ByVal arg1 As String) +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(); + 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 ParameterCanBeByValInspection(parseResult.State); + inspection.GetInspectionResults().First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void ParameterCanByByVal_ReturnsResult_QuickFixWorks_PassedByRefUnassigned() + { + const string inputCode = +@"Sub Foo(arg1 As String) +End Sub"; + + const string expectedCode = +@"Sub Foo(ByVal arg1 As String) +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(); + 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 ParameterCanBeByValInspection(parseResult.State); + inspection.GetInspectionResults().First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new ParameterCanBeByValInspection(null); + Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "ParameterCanBeByValInspection"; + var inspection = new ParameterCanBeByValInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/ParameterNotUsedInspectionTests.cs b/RubberduckTests/Inspections/ParameterNotUsedInspectionTests.cs index 114d6ba1ed..5211d4dbfb 100644 --- a/RubberduckTests/Inspections/ParameterNotUsedInspectionTests.cs +++ b/RubberduckTests/Inspections/ParameterNotUsedInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,191 +7,216 @@ 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 ParameterNotUsedInspectionTests -// { -// [TestMethod] -// public void ParameterNotUsed_ReturnsResult() -// { -// const string inputCode = -//@"Private Sub Foo(ByVal arg1 as Integer) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ParameterNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ParameterNotUsed_ReturnsResult_MultipleSubs() -// { -// const string inputCode = -//@"Private Sub Foo(ByVal arg1 as Integer) -//End Sub -// -//Private Sub Goo(ByVal arg1 as Integer) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ParameterNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ParameterUsed_DoesNotReturnResult() -// { -// const string inputCode = -//@"Private Sub Foo(ByVal arg1 as Integer) -// arg1 = 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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ParameterNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ParameterNotUsed_ReturnsResult_SomeParamsUsed() -// { -// const string inputCode = -//@"Private Sub Foo(ByVal arg1 as Integer, ByVal arg2 as String) -// arg1 = 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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ParameterNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ParameterNotUsed_ReturnsResult_InterfaceImplementation() -// { -// //Input -// const string inputCode1 = -//@"Public Sub DoSomething(ByVal a As Integer) -//End Sub"; -// const string inputCode2 = -//@"Implements IClass1 -// -//Private Sub IClass1_DoSomething(ByVal a As Integer) -//End Sub"; - -// //Arrange -// var builder = new MockVbeBuilder(); -// var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) -// .AddComponent("IClass1", vbext_ComponentType.vbext_ct_ClassModule, inputCode1) -// .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode2) -// .Build().Object; - -// var codePaneFactory = new CodePaneWrapperFactory(); -// var mockHost = new Mock(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ParameterNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ParameterNotUsed_QuickFixWorks() -// { -// const string inputCode = -//@"Private Sub Foo(ByVal arg1 as Integer) -//End Sub"; - -// const string expectedCode = -//@"Private Sub Foo() -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ParameterNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// inspectionResults.First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new ParameterNotUsedInspection(); -// Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "ParameterNotUsedInspection"; -// var inspection = new ParameterNotUsedInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class ParameterNotUsedInspectionTests + { + 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 ParameterNotUsed_ReturnsResult() + { + const string inputCode = +@"Private Sub Foo(ByVal arg1 as Integer) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ParameterNotUsedInspection(vbe.Object, parseResult.State, null); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ParameterNotUsed_ReturnsResult_MultipleSubs() + { + const string inputCode = +@"Private Sub Foo(ByVal arg1 as Integer) +End Sub + +Private Sub Goo(ByVal arg1 as Integer) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ParameterNotUsedInspection(vbe.Object, parseResult.State, null); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void ParameterUsed_DoesNotReturnResult() + { + const string inputCode = +@"Private Sub Foo(ByVal arg1 as Integer) + arg1 = 9 +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ParameterNotUsedInspection(vbe.Object, parseResult.State, null); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ParameterNotUsed_ReturnsResult_SomeParamsUsed() + { + const string inputCode = +@"Private Sub Foo(ByVal arg1 as Integer, ByVal arg2 as String) + arg1 = 9 +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ParameterNotUsedInspection(vbe.Object, parseResult.State, null); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ParameterNotUsed_ReturnsResult_InterfaceImplementation() + { + //Input + const string inputCode1 = +@"Public Sub DoSomething(ByVal a As Integer) +End Sub"; + const string inputCode2 = +@"Implements IClass1 + +Private Sub IClass1_DoSomething(ByVal a As Integer) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) + .AddComponent("IClass1", vbext_ComponentType.vbext_ct_ClassModule, inputCode1) + .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode2) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + 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 ParameterNotUsedInspection(vbe.Object, parseResult.State, null); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ParameterNotUsed_QuickFixWorks() + { + const string inputCode = +@"Private Sub Foo(ByVal arg1 as Integer) +End Sub"; + + const string expectedCode = +@"Private Sub Foo() +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(); + 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 ParameterNotUsedInspection(vbe.Object, parseResult.State, null); + var inspectionResults = inspection.GetInspectionResults(); + + inspectionResults.First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new ParameterNotUsedInspection(null, null, null); + Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "ParameterNotUsedInspection"; + var inspection = new ParameterNotUsedInspection(null, null, null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/ProcedureNotUsedInspectionTests.cs b/RubberduckTests/Inspections/ProcedureNotUsedInspectionTests.cs index ed049c3314..c5235011ee 100644 --- a/RubberduckTests/Inspections/ProcedureNotUsedInspectionTests.cs +++ b/RubberduckTests/Inspections/ProcedureNotUsedInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,251 +7,283 @@ 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 ProcedureNotUsedInspectionTests -// { -// [TestMethod] -// public void ProcedureNotUsed_ReturnsResult() -// { -// const string inputCode = -//@"Private Sub Foo() -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ProcedureNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ProcedureNotUsed_ReturnsResult_MultipleSubs() -// { -// const string inputCode = -//@"Private Sub Foo() -//End Sub -// -//Private Sub Goo() -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ProcedureNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ProcedureUsed_DoesNotReturnResult() -// { -// const string inputCode = -//@"Private Sub Foo() -// Goo -//End Sub -// -//Private Sub Goo() -// Foo -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ProcedureNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ProcedureNotUsed_ReturnsResult_SomeProceduresUsed() -// { -// const string inputCode = -//@"Private Sub Foo() -//End Sub -// -//Private Sub Goo() -// Foo -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ProcedureNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ProcedureNotUsed_DoesNotReturnResult_InterfaceImplementation() -// { -// //Input -// const string inputCode1 = -//@"Public Sub DoSomething(ByVal a As Integer) -//End Sub"; -// const string inputCode2 = -//@"Implements IClass1 -// -//Private Sub IClass1_DoSomething(ByVal a As Integer) -//End Sub"; - -// //Arrange -// var builder = new MockVbeBuilder(); -// var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) -// .AddComponent("IClass1", vbext_ComponentType.vbext_ct_ClassModule, inputCode1) -// .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode2) -// .Build().Object; - -// var codePaneFactory = new CodePaneWrapperFactory(); -// var mockHost = new Mock(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ProcedureNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ProcedureNotUsed_DoesNotReturnResult_EventImplementation() -// { -// //Input -// const string inputCode1 = -//@"Public Event Foo(ByVal arg1 As Integer, ByVal arg2 As String)"; -// const string inputCode2 = -//@"Private WithEvents abc As Class1 -// -//Private Sub abc_Foo(ByVal arg1 As Integer, ByVal arg2 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, inputCode1) -// .AddComponent("Class2", vbext_ComponentType.vbext_ct_ClassModule, inputCode2) -// .Build().Object; - -// var codePaneFactory = new CodePaneWrapperFactory(); -// var mockHost = new Mock(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ProcedureNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ProcedureNotUsed_ReturnsResult_PublicModuleMember() -// { -// //Input -// const string inputCode = -//@"Private Sub Class_Initialize() -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ProcedureNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void ProcedureNotUsed_QuickFixWorks() -// { -// const string inputCode = -//@"Private Sub Foo(ByVal arg1 as Integer) -//End Sub"; - -// const string expectedCode = @""; - -// //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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new ProcedureNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// inspectionResults.First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new ProcedureNotUsedInspection(); -// Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "ProcedureNotUsedInspection"; -// var inspection = new ProcedureNotUsedInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class ProcedureNotUsedInspectionTests + { + 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 ProcedureNotUsed_ReturnsResult() + { + const string inputCode = +@"Private Sub Foo() +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ProcedureNotUsedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ProcedureNotUsed_ReturnsResult_MultipleSubs() + { + const string inputCode = +@"Private Sub Foo() +End Sub + +Private Sub Goo() +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ProcedureNotUsedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void ProcedureUsed_DoesNotReturnResult() + { + const string inputCode = +@"Private Sub Foo() + Goo +End Sub + +Private Sub Goo() + Foo +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ProcedureNotUsedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ProcedureNotUsed_ReturnsResult_SomeProceduresUsed() + { + const string inputCode = +@"Private Sub Foo() +End Sub + +Private Sub Goo() + Foo +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ProcedureNotUsedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ProcedureNotUsed_DoesNotReturnResult_InterfaceImplementation() + { + //Input + const string inputCode1 = +@"Public Sub DoSomething(ByVal a As Integer) +End Sub"; + const string inputCode2 = +@"Implements IClass1 + +Private Sub IClass1_DoSomething(ByVal a As Integer) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none) + .AddComponent("IClass1", vbext_ComponentType.vbext_ct_ClassModule, inputCode1) + .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode2) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + 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 ProcedureNotUsedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ProcedureNotUsed_DoesNotReturnResult_EventImplementation() + { + //Input + const string inputCode1 = +@"Public Event Foo(ByVal arg1 As Integer, ByVal arg2 As String)"; + const string inputCode2 = +@"Private WithEvents abc As Class1 + +Private Sub abc_Foo(ByVal arg1 As Integer, ByVal arg2 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, inputCode1) + .AddComponent("Class2", vbext_ComponentType.vbext_ct_ClassModule, inputCode2) + .Build(); + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + 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 ProcedureNotUsedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ProcedureNotUsed_ReturnsResult_PublicModuleMember() + { + //Input + const string inputCode = +@"Private Sub Class_Initialize() +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 ProcedureNotUsedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ProcedureNotUsed_QuickFixWorks() + { + const string inputCode = +@"Private Sub Foo(ByVal arg1 as Integer) +End Sub"; + + const string expectedCode = @""; + + //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(); + 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 ProcedureNotUsedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + inspectionResults.First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new ProcedureNotUsedInspection(null); + Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "ProcedureNotUsedInspection"; + var inspection = new ProcedureNotUsedInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/VariableIsNeverAssignedInspectionTests.cs b/RubberduckTests/Inspections/VariableIsNeverAssignedInspectionTests.cs index d02f1d1727..15695e96f1 100644 --- a/RubberduckTests/Inspections/VariableIsNeverAssignedInspectionTests.cs +++ b/RubberduckTests/Inspections/VariableIsNeverAssignedInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,163 +7,183 @@ 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 VariableIsNeverAssignedInspectionTests -// { -// [TestMethod] -// public void VariableNotAssigned_ReturnsResult() -// { -// const string inputCode = -//@"Sub Foo() -// Dim var1 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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableNotAssignedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void UnassignedVariable_ReturnsResult_MultipleVariables() -// { -// const string inputCode = -//@"Sub Foo() -// Dim var1 As String -// Dim var2 As Date -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableNotAssignedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void UnassignedVariable_DoesNotReturnResult() -// { -// const string inputCode = -//@"Function Foo() As Boolean -// Dim var1 as String -// var1 = ""test"" -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableNotAssignedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void UnassignedVariable_ReturnsResult_MultipleVariables_SomeAssigned() -// { -// const string inputCode = -//@"Sub Foo() -// Dim var1 as Integer -// var1 = 8 -// -// Dim var2 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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableNotAssignedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void UnassignedVariable_QuickFixWorks() -// { -// const string inputCode = -//@"Sub Foo() -// Dim var1 as Integer -//End Sub"; - -// const string expectedCode = -//@"Sub Foo() -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableNotAssignedInspection(); -// inspection.GetInspectionResults(parseResult).First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new VariableNotAssignedInspection(); -// Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "VariableNotAssignedInspection"; -// var inspection = new VariableNotAssignedInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class VariableIsNeverAssignedInspectionTests + { + 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 VariableNotAssigned_ReturnsResult() + { + const string inputCode = +@"Sub Foo() + Dim var1 As String +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 VariableNotAssignedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void UnassignedVariable_ReturnsResult_MultipleVariables() + { + const string inputCode = +@"Sub Foo() + Dim var1 As String + Dim var2 As Date +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 VariableNotAssignedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void UnassignedVariable_DoesNotReturnResult() + { + const string inputCode = +@"Function Foo() As Boolean + Dim var1 as String + var1 = ""test"" +End Function"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 VariableNotAssignedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void UnassignedVariable_ReturnsResult_MultipleVariables_SomeAssigned() + { + const string inputCode = +@"Sub Foo() + Dim var1 as Integer + var1 = 8 + + Dim var2 as String +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 VariableNotAssignedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void UnassignedVariable_QuickFixWorks() + { + const string inputCode = +@"Sub Foo() + Dim var1 as Integer +End Sub"; + + const string expectedCode = +@"Sub Foo() +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(); + 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 VariableNotAssignedInspection(parseResult.State); + inspection.GetInspectionResults().First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new VariableNotAssignedInspection(null); + Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "VariableNotAssignedInspection"; + var inspection = new VariableNotAssignedInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/VariableNeverUsedInspectionTests.cs b/RubberduckTests/Inspections/VariableNeverUsedInspectionTests.cs index 39dbf2f825..6fdf5ef027 100644 --- a/RubberduckTests/Inspections/VariableNeverUsedInspectionTests.cs +++ b/RubberduckTests/Inspections/VariableNeverUsedInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,173 +7,193 @@ 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 VariableNeverUsedInspectionTests -// { -// [TestMethod] -// public void VariableNotAssigned_ReturnsResult() -// { -// const string inputCode = -//@"Sub Foo() -// Dim var1 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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void UnassignedVariable_ReturnsResult_MultipleVariables() -// { -// const string inputCode = -//@"Sub Foo() -// Dim var1 As String -// Dim var2 As Date -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void UnassignedVariable_DoesNotReturnResult() -// { -// const string inputCode = -//@"Function Foo() As Boolean -// Dim var1 as String -// var1 = ""test"" -// -// Goo var1 -//End Function -// -//Sub Goo(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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void UnassignedVariable_ReturnsResult_MultipleVariables_SomeAssigned() -// { -// const string inputCode = -//@"Sub Foo() -// Dim var1 as Integer -// var1 = 8 -// -// Dim var2 as String -// -// Goo var1 -//End Sub -// -//Sub Goo(ByVal arg1 As Integer) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableNotUsedInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void UnassignedVariable_ReturnsResult_QuickFixWorks() -// { -// const string inputCode = -//@"Sub Foo() -// Dim var1 As String -//End Sub"; - -// const string expectedCode = -//@"Sub Foo() -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableNotUsedInspection(); -// inspection.GetInspectionResults(parseResult).First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new VariableNotUsedInspection(); -// Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "VariableNotUsedInspection"; -// var inspection = new VariableNotUsedInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class VariableNeverUsedInspectionTests + { + 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 VariableNotAssigned_ReturnsResult() + { + const string inputCode = +@"Sub Foo() + Dim var1 As String +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 VariableNotUsedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void UnassignedVariable_ReturnsResult_MultipleVariables() + { + const string inputCode = +@"Sub Foo() + Dim var1 As String + Dim var2 As Date +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 VariableNotUsedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void UnassignedVariable_DoesNotReturnResult() + { + const string inputCode = +@"Function Foo() As Boolean + Dim var1 as String + var1 = ""test"" + + Goo var1 +End Function + +Sub Goo(ByVal arg1 As String) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 VariableNotUsedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void UnassignedVariable_ReturnsResult_MultipleVariables_SomeAssigned() + { + const string inputCode = +@"Sub Foo() + Dim var1 as Integer + var1 = 8 + + Dim var2 as String + + Goo var1 +End Sub + +Sub Goo(ByVal arg1 As Integer) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 VariableNotUsedInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void UnassignedVariable_ReturnsResult_QuickFixWorks() + { + const string inputCode = +@"Sub Foo() + Dim var1 As String +End Sub"; + + const string expectedCode = +@"Sub Foo() +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(); + 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 VariableNotUsedInspection(parseResult.State); + inspection.GetInspectionResults().First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new VariableNotUsedInspection(null); + Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "VariableNotUsedInspection"; + var inspection = new VariableNotUsedInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file diff --git a/RubberduckTests/Inspections/VariableTypeNotDeclaredInspectionTests.cs b/RubberduckTests/Inspections/VariableTypeNotDeclaredInspectionTests.cs index d912db486a..4881001a86 100644 --- a/RubberduckTests/Inspections/VariableTypeNotDeclaredInspectionTests.cs +++ b/RubberduckTests/Inspections/VariableTypeNotDeclaredInspectionTests.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading; using Microsoft.Vbe.Interop; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -6,287 +7,318 @@ 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 VariableTypeNotDeclaredInspectionTests -// { -// [TestMethod] -// public void VariableTypeNotDeclared_ReturnsResult_Parameter() -// { -// const string inputCode = -//@"Sub Foo(arg1) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableTypeNotDeclaredInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void VariableTypeNotDeclared_ReturnsResult_MultipleParams() -// { -// const string inputCode = -//@"Sub Foo(arg1, 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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableTypeNotDeclaredInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void VariableTypeNotDeclared_DoesNotReturnResult_Parameter() -// { -// const string inputCode = -//@"Sub Foo(arg1 As Date) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableTypeNotDeclaredInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void VariableTypeNotDeclared_ReturnsResult_SomeTypesNotDeclared_Parameters() -// { -// const string inputCode = -//@"Sub Foo(arg1, arg2 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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableTypeNotDeclaredInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void VariableTypeNotDeclared_ReturnsResult_QuickFixWorks_Parameter() -// { -// const string inputCode = -//@"Sub Foo(arg1) -//End Sub"; - -// const string expectedCode = -//@"Sub Foo(arg1 As Variant) -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableTypeNotDeclaredInspection(); -// inspection.GetInspectionResults(parseResult).First().QuickFixes.First().Fix(); - -// var actual = module.Lines(); -// Assert.AreEqual(expectedCode, actual); -// } - -// [TestMethod] -// public void VariableTypeNotDeclared_ReturnsResult_Variable() -// { -// const string inputCode = -//@"Sub Foo() -// Dim var1 -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableTypeNotDeclaredInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void VariableTypeNotDeclared_ReturnsResult_MultipleVariables() -// { -// const string inputCode = -//@"Sub Foo() -// Dim var1 -// Dim var2 -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableTypeNotDeclaredInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(2, inspectionResults.Count()); -// } - -// [TestMethod] -// public void VariableTypeNotDeclared_DoesNotReturnResult_Variable() -// { -// const string inputCode = -//@"Sub Foo() -// Dim var1 As Integer -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableTypeNotDeclaredInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(0, inspectionResults.Count()); -// } - -// [TestMethod] -// public void VariableTypeNotDeclared_ReturnsResult_SomeTypesNotDeclared_Variables() -// { -// const string inputCode = -//@"Sub Foo() -// Dim var1 -// Dim var2 As Date -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableTypeNotDeclaredInspection(); -// var inspectionResults = inspection.GetInspectionResults(parseResult); - -// Assert.AreEqual(1, inspectionResults.Count()); -// } - -// [TestMethod] -// public void VariableTypeNotDeclared_ReturnsResult_QuickFixWorks_Variable() -// { -// const string inputCode = -//@"Sub Foo() -// Dim var1 -//End Sub"; - -// const string expectedCode = -//@"Sub Foo() -// Dim var1 As Variant -//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(); -// mockHost.SetupAllProperties(); -// var parseResult = new RubberduckParser().Parse(project); - -// var inspection = new VariableTypeNotDeclaredInspection(); -// inspection.GetInspectionResults(parseResult).First().QuickFixes.First().Fix(); - -// Assert.AreEqual(expectedCode, module.Lines()); -// } - -// [TestMethod] -// public void InspectionType() -// { -// var inspection = new VariableTypeNotDeclaredInspection(); -// Assert.AreEqual(CodeInspectionType.LanguageOpportunities, inspection.InspectionType); -// } - -// [TestMethod] -// public void InspectionName() -// { -// const string inspectionName = "VariableTypeNotDeclaredInspection"; -// var inspection = new VariableTypeNotDeclaredInspection(); - -// Assert.AreEqual(inspectionName, inspection.Name); -// } -// } + [TestClass] + public class VariableTypeNotDeclaredInspectionTests + { + 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 VariableTypeNotDeclared_ReturnsResult_Parameter() + { + const string inputCode = +@"Sub Foo(arg1) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 VariableTypeNotDeclaredInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void VariableTypeNotDeclared_ReturnsResult_MultipleParams() + { + const string inputCode = +@"Sub Foo(arg1, arg2) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 VariableTypeNotDeclaredInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void VariableTypeNotDeclared_DoesNotReturnResult_Parameter() + { + const string inputCode = +@"Sub Foo(arg1 As Date) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 VariableTypeNotDeclaredInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void VariableTypeNotDeclared_ReturnsResult_SomeTypesNotDeclared_Parameters() + { + const string inputCode = +@"Sub Foo(arg1, arg2 As String) +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 VariableTypeNotDeclaredInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void VariableTypeNotDeclared_ReturnsResult_QuickFixWorks_Parameter() + { + const string inputCode = +@"Sub Foo(arg1) +End Sub"; + + const string expectedCode = +@"Sub Foo(arg1 As Variant) +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(); + 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 VariableTypeNotDeclaredInspection(parseResult.State); + inspection.GetInspectionResults().First().QuickFixes.First().Fix(); + + var actual = module.Lines(); + Assert.AreEqual(expectedCode, actual); + } + + [TestMethod] + public void VariableTypeNotDeclared_ReturnsResult_Variable() + { + const string inputCode = +@"Sub Foo() + Dim var1 +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 VariableTypeNotDeclaredInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void VariableTypeNotDeclared_ReturnsResult_MultipleVariables() + { + const string inputCode = +@"Sub Foo() + Dim var1 + Dim var2 +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 VariableTypeNotDeclaredInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(2, inspectionResults.Count()); + } + + [TestMethod] + public void VariableTypeNotDeclared_DoesNotReturnResult_Variable() + { + const string inputCode = +@"Sub Foo() + Dim var1 As Integer +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 VariableTypeNotDeclaredInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void VariableTypeNotDeclared_ReturnsResult_SomeTypesNotDeclared_Variables() + { + const string inputCode = +@"Sub Foo() + Dim var1 + Dim var2 As Date +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + 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 VariableTypeNotDeclaredInspection(parseResult.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void VariableTypeNotDeclared_ReturnsResult_QuickFixWorks_Variable() + { + const string inputCode = +@"Sub Foo() + Dim var1 +End Sub"; + + const string expectedCode = +@"Sub Foo() + Dim var1 As Variant +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(); + 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 VariableTypeNotDeclaredInspection(parseResult.State); + inspection.GetInspectionResults().First().QuickFixes.First().Fix(); + + Assert.AreEqual(expectedCode, module.Lines()); + } + + [TestMethod] + public void InspectionType() + { + var inspection = new VariableTypeNotDeclaredInspection(null); + Assert.AreEqual(CodeInspectionType.LanguageOpportunities, inspection.InspectionType); + } + + [TestMethod] + public void InspectionName() + { + const string inspectionName = "VariableTypeNotDeclaredInspection"; + var inspection = new VariableTypeNotDeclaredInspection(null); + + Assert.AreEqual(inspectionName, inspection.Name); + } + } } \ No newline at end of file