Skip to content

Commit d73a266

Browse files
committed
Tests for Write Only Property
1 parent 3d4b519 commit d73a266

File tree

2 files changed

+185
-0
lines changed

2 files changed

+185
-0
lines changed
Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
using System.Linq;
2+
using System.Threading;
3+
using Microsoft.Vbe.Interop;
4+
using Microsoft.VisualStudio.TestTools.UnitTesting;
5+
using Moq;
6+
using Rubberduck.Inspections;
7+
using Rubberduck.Parsing;
8+
using Rubberduck.Parsing.VBA;
9+
using Rubberduck.VBEditor.VBEHost;
10+
using RubberduckTests.Mocks;
11+
12+
namespace RubberduckTests.Inspections
13+
{
14+
[TestClass]
15+
public class WriteOnlyPropertyInspectionTests
16+
{
17+
[TestMethod]
18+
[TestCategory("Inspections")]
19+
public void WriteOnlyProperty_ReturnsResult_Let()
20+
{
21+
const string inputCode =
22+
@"Property Let Foo(value)
23+
End Property";
24+
25+
//Arrange
26+
var builder = new MockVbeBuilder();
27+
var project = builder.ProjectBuilder("VBAProject", vbext_ProjectProtection.vbext_pp_none)
28+
.AddComponent("MyClass", vbext_ComponentType.vbext_ct_ClassModule, inputCode)
29+
.Build();
30+
var vbe = builder.AddProject(project).Build();
31+
32+
var mockHost = new Mock<IHostApplication>();
33+
mockHost.SetupAllProperties();
34+
var parser = MockParser.Create(vbe.Object, new RubberduckParserState(vbe.Object, new Mock<ISinks>().Object));
35+
36+
parser.Parse(new CancellationTokenSource());
37+
if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); }
38+
39+
var inspection = new WriteOnlyPropertyInspection(parser.State);
40+
var inspectionResults = inspection.GetInspectionResults();
41+
42+
Assert.AreEqual(1, inspectionResults.Count());
43+
}
44+
45+
[TestMethod]
46+
[TestCategory("Inspections")]
47+
public void WriteOnlyProperty_ReturnsResult_Set()
48+
{
49+
const string inputCode =
50+
@"Property Set Foo(value)
51+
End Property";
52+
53+
//Arrange
54+
var builder = new MockVbeBuilder();
55+
var project = builder.ProjectBuilder("VBAProject", vbext_ProjectProtection.vbext_pp_none)
56+
.AddComponent("MyClass", vbext_ComponentType.vbext_ct_ClassModule, inputCode)
57+
.Build();
58+
var vbe = builder.AddProject(project).Build();
59+
60+
var mockHost = new Mock<IHostApplication>();
61+
mockHost.SetupAllProperties();
62+
var parser = MockParser.Create(vbe.Object, new RubberduckParserState(vbe.Object, new Mock<ISinks>().Object));
63+
64+
parser.Parse(new CancellationTokenSource());
65+
if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); }
66+
67+
var inspection = new WriteOnlyPropertyInspection(parser.State);
68+
var inspectionResults = inspection.GetInspectionResults();
69+
70+
Assert.AreEqual(1, inspectionResults.Count());
71+
}
72+
73+
[TestMethod]
74+
[TestCategory("Inspections")]
75+
public void WriteOnlyProperty_ReturnsResult_LetAndSet()
76+
{
77+
const string inputCode =
78+
@"Property Let Foo(value)
79+
End Property
80+
81+
Property Set Foo(value)
82+
End Property";
83+
84+
//Arrange
85+
var builder = new MockVbeBuilder();
86+
var project = builder.ProjectBuilder("VBAProject", vbext_ProjectProtection.vbext_pp_none)
87+
.AddComponent("MyClass", vbext_ComponentType.vbext_ct_ClassModule, inputCode)
88+
.Build();
89+
var vbe = builder.AddProject(project).Build();
90+
91+
var mockHost = new Mock<IHostApplication>();
92+
mockHost.SetupAllProperties();
93+
var parser = MockParser.Create(vbe.Object, new RubberduckParserState(vbe.Object, new Mock<ISinks>().Object));
94+
95+
parser.Parse(new CancellationTokenSource());
96+
if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); }
97+
98+
var inspection = new WriteOnlyPropertyInspection(parser.State);
99+
var inspectionResults = inspection.GetInspectionResults();
100+
101+
Assert.AreEqual(2, inspectionResults.Count());
102+
}
103+
104+
[TestMethod]
105+
[TestCategory("Inspections")]
106+
public void WriteOnlyProperty_DoesNotReturnsResult_Get()
107+
{
108+
const string inputCode =
109+
@"Property Get Foo()
110+
End Property";
111+
112+
//Arrange
113+
var builder = new MockVbeBuilder();
114+
var project = builder.ProjectBuilder("VBAProject", vbext_ProjectProtection.vbext_pp_none)
115+
.AddComponent("MyClass", vbext_ComponentType.vbext_ct_ClassModule, inputCode)
116+
.Build();
117+
var vbe = builder.AddProject(project).Build();
118+
119+
var mockHost = new Mock<IHostApplication>();
120+
mockHost.SetupAllProperties();
121+
var parser = MockParser.Create(vbe.Object, new RubberduckParserState(vbe.Object, new Mock<ISinks>().Object));
122+
123+
parser.Parse(new CancellationTokenSource());
124+
if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); }
125+
126+
var inspection = new WriteOnlyPropertyInspection(parser.State);
127+
var inspectionResults = inspection.GetInspectionResults();
128+
129+
Assert.IsFalse(inspectionResults.Any());
130+
}
131+
132+
[TestMethod]
133+
[TestCategory("Inspections")]
134+
public void WriteOnlyProperty_DoesNotReturnsResult_GetAndLetAndSet()
135+
{
136+
const string inputCode =
137+
@"Property Get Foo()
138+
End Property
139+
140+
Property Let Foo(value)
141+
End Property
142+
143+
Property Set Foo(value)
144+
End Property";
145+
146+
//Arrange
147+
var builder = new MockVbeBuilder();
148+
var project = builder.ProjectBuilder("VBAProject", vbext_ProjectProtection.vbext_pp_none)
149+
.AddComponent("MyClass", vbext_ComponentType.vbext_ct_ClassModule, inputCode)
150+
.Build();
151+
var vbe = builder.AddProject(project).Build();
152+
153+
var mockHost = new Mock<IHostApplication>();
154+
mockHost.SetupAllProperties();
155+
var parser = MockParser.Create(vbe.Object, new RubberduckParserState(vbe.Object, new Mock<ISinks>().Object));
156+
157+
parser.Parse(new CancellationTokenSource());
158+
if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); }
159+
160+
var inspection = new WriteOnlyPropertyInspection(parser.State);
161+
var inspectionResults = inspection.GetInspectionResults();
162+
163+
Assert.IsFalse(inspectionResults.Any());
164+
}
165+
166+
[TestMethod]
167+
[TestCategory("Inspections")]
168+
public void InspectionType()
169+
{
170+
var inspection = new WriteOnlyPropertyInspection(null);
171+
Assert.AreEqual(CodeInspectionType.CodeQualityIssues, inspection.InspectionType);
172+
}
173+
174+
[TestMethod]
175+
[TestCategory("Inspections")]
176+
public void InspectionName()
177+
{
178+
const string inspectionName = "WriteOnlyPropertyInspection";
179+
var inspection = new WriteOnlyPropertyInspection(null);
180+
181+
Assert.AreEqual(inspectionName, inspection.Name);
182+
}
183+
}
184+
}

RubberduckTests/RubberduckTests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@
9898
<Compile Include="Inspections\ImplicitActiveSheetReferenceInspectionTests.cs" />
9999
<Compile Include="Inspections\MultipleFolderAnnotationsInspectionTests.cs" />
100100
<Compile Include="Inspections\ObjectVariableNotSetInpsectionTests.cs" />
101+
<Compile Include="Inspections\WriteOnlyPropertyInspectionTests.cs" />
101102
<Compile Include="MockParser.cs" />
102103
<Compile Include="Inspections\MoveFieldCloserToUsageInspectionTests.cs" />
103104
<Compile Include="Inspections\AssignedByValParameterInspectionTests.cs" />

0 commit comments

Comments
 (0)