Skip to content

Commit 96840e0

Browse files
committed
added MockUserFormBuilder
1 parent 4b4951a commit 96840e0

File tree

4 files changed

+93
-6
lines changed

4 files changed

+93
-6
lines changed

RubberduckTests/Mocks/MockProjectBuilder.cs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ public class MockProjectBuilder
1414
private readonly Mock<VBComponents> _vbComponents;
1515
private readonly Mock<References> _vbReferences;
1616

17-
private readonly List<Mock<VBComponent>> _components = new List<Mock<VBComponent>>();
18-
private readonly List<Mock<Reference>> _references = new List<Mock<Reference>>();
17+
private readonly ICollection<Mock<VBComponent>> _components = new List<Mock<VBComponent>>();
18+
private readonly ICollection<Mock<Reference>> _references = new List<Mock<Reference>>();
1919

2020
public MockProjectBuilder(string name, vbext_ProjectProtection protection, Func<VBE> getVbe)
2121
{
@@ -33,9 +33,13 @@ public MockProjectBuilder(string name, vbext_ProjectProtection protection, Func<
3333
public MockProjectBuilder AddComponent(string name, vbext_ComponentType type, string content)
3434
{
3535
var component = CreateComponentMock(name, type, content);
36-
_components.Add(component);
36+
return AddComponent(component);
37+
}
3738

38-
return this;
39+
public MockProjectBuilder AddComponent(Mock<VBComponent> component)
40+
{
41+
_components.Add(component);
42+
return this;
3943
}
4044

4145
public MockProjectBuilder AddReference(string name, string filePath)
@@ -44,6 +48,12 @@ public MockProjectBuilder AddReference(string name, string filePath)
4448
return this;
4549
}
4650

51+
public MockUserFormBuilder UserFormBuilder(string name, string content)
52+
{
53+
var component = CreateComponentMock(name, vbext_ComponentType.vbext_ct_MSForm, content);
54+
return new MockUserFormBuilder(component);
55+
}
56+
4757
public Mock<VBProject> Build()
4858
{
4959
return _project;
@@ -70,8 +80,9 @@ private Mock<VBComponents> CreateComponentsMock()
7080
result.Setup(c => c.GetEnumerator()).Returns(() => _components.GetEnumerator());
7181
result.As<IEnumerable>().Setup(c => c.GetEnumerator()).Returns(() => _components.GetEnumerator());
7282

73-
result.Setup(m => m.Item(It.IsAny<int>())).Returns<int>(index => _components[index].Object);
83+
result.Setup(m => m.Item(It.IsAny<int>())).Returns<int>(index => _components.ElementAt(index).Object);
7484
result.Setup(m => m.Item(It.IsAny<string>())).Returns<string>(name => _components.Single(item => item.Object.Name == name).Object);
85+
result.SetupGet(m => m.Count).Returns(_components.Count);
7586

7687
return result;
7788
}
@@ -86,7 +97,8 @@ private Mock<References> CreateReferencesMock()
8697
result.Setup(m => m.GetEnumerator()).Returns(() => _references.GetEnumerator());
8798
result.As<IEnumerable>().Setup(m => m.GetEnumerator()).Returns(() => _references.GetEnumerator());
8899

89-
result.Setup(m => m.Item(It.IsAny<int>())).Returns<int>(index => _references[index].Object);
100+
result.Setup(m => m.Item(It.IsAny<int>())).Returns<int>(index => _references.ElementAt(index).Object);
101+
result.SetupGet(m => m.Count).Returns(_references.Count);
90102

91103
return result;
92104
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
using System;
2+
using System.Collections;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using Microsoft.Vbe.Interop;
6+
using Microsoft.Vbe.Interop.Forms;
7+
using Moq;
8+
9+
namespace RubberduckTests.Mocks
10+
{
11+
public class MockUserFormBuilder
12+
{
13+
private readonly Mock<VBComponent> _component;
14+
private readonly Mock<Controls> _vbControls;
15+
private readonly ICollection<Mock<Control>> _controls = new List<Mock<Control>>();
16+
17+
public MockUserFormBuilder(Mock<VBComponent> component)
18+
{
19+
if (component.Object.Type != vbext_ComponentType.vbext_ct_MSForm)
20+
{
21+
throw new InvalidOperationException("Component type must be 'vbext_ComponentType.vbext_ct_MSForm'.");
22+
}
23+
24+
_component = component;
25+
_vbControls = CreateControlsMock();
26+
}
27+
28+
public MockUserFormBuilder AddControl(string name)
29+
{
30+
var control = new Mock<Control>();
31+
control.SetupProperty(m => m.Name, name);
32+
33+
_controls.Add(control);
34+
return this;
35+
}
36+
37+
public Mock<VBComponent> Build()
38+
{
39+
var designer = CreateMockDesigner();
40+
_component.SetupGet(m => m.Designer).Returns(() => designer);
41+
42+
return _component;
43+
}
44+
45+
private Mock<UserForm> CreateMockDesigner()
46+
{
47+
var result = new Mock<UserForm>();
48+
result.SetupGet(m => m.Controls).Returns(() => _vbControls.Object);
49+
50+
return result;
51+
}
52+
53+
private Mock<Controls> CreateControlsMock()
54+
{
55+
var result = new Mock<Controls>();
56+
result.Setup(m => m.GetEnumerator()).Returns(() => _controls.GetEnumerator());
57+
result.As<IEnumerable>().Setup(m => m.GetEnumerator()).Returns(() => _controls.GetEnumerator());
58+
59+
result.Setup(m => m.Item(It.IsAny<int>())).Returns<int>(index => _controls.ElementAt(index).Object);
60+
result.SetupGet(m => m.Count).Returns(_controls.Count);
61+
return result;
62+
}
63+
}
64+
}

RubberduckTests/Mocks/MockVbeBuilder.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,19 +73,26 @@ private Mock<VBE> CreateVbeMock()
7373
private Mock<VBProjects> CreateProjectsMock()
7474
{
7575
var result = new Mock<VBProjects>();
76+
7677
result.Setup(m => m.GetEnumerator()).Returns(_projects.GetEnumerator());
7778
result.As<IEnumerable>().Setup(m => m.GetEnumerator()).Returns(_projects.GetEnumerator());
79+
7880
result.Setup(m => m.Item(It.IsAny<int>())).Returns<int>(value => _projects.ElementAt(value));
81+
result.SetupGet(m => m.Count).Returns(_projects.Count);
82+
7983

8084
return result;
8185
}
8286

8387
private Mock<CodePanes> CreateCodePanesMock()
8488
{
8589
var result = new Mock<CodePanes>();
90+
8691
result.Setup(m => m.GetEnumerator()).Returns(_codePanes.GetEnumerator());
8792
result.As<IEnumerable>().Setup(m => m.GetEnumerator()).Returns(_codePanes.GetEnumerator());
93+
8894
result.Setup(m => m.Item(It.IsAny<int>())).Returns<int>(value => _codePanes.ElementAt(value));
95+
result.SetupGet(m => m.Count).Returns(_codePanes.Count);
8996

9097
return result;
9198
}

RubberduckTests/RubberduckTests.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,9 @@
143143
<EmbedInteropTypes>True</EmbedInteropTypes>
144144
<HintPath>..\libs\Microsoft.Vbe.Interop.dll</HintPath>
145145
</Reference>
146+
<Reference Include="Microsoft.Vbe.Interop.Forms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
147+
<EmbedInteropTypes>True</EmbedInteropTypes>
148+
</Reference>
146149
<Reference Include="Moq">
147150
<HintPath>..\packages\Moq.4.2.1409.1722\lib\net40\Moq.dll</HintPath>
148151
</Reference>
@@ -179,6 +182,7 @@
179182
<ItemGroup>
180183
<Compile Include="Mocks\MockProjectBuilder.cs" />
181184
<Compile Include="Mocks\MockFactory.cs" />
185+
<Compile Include="Mocks\MockUserFormBuilder.cs" />
182186
<Compile Include="Mocks\MockWindowsCollection.cs" />
183187
<Compile Include="Mocks\MockVbeBuilder.cs" />
184188
<Compile Include="VbeTestBase.cs" />

0 commit comments

Comments
 (0)