Skip to content

Commit 2624800

Browse files
committed
Pull from upstream
2 parents 4d2dfcd + 5959f0a commit 2624800

File tree

13 files changed

+313
-79
lines changed

13 files changed

+313
-79
lines changed

RetailCoder.VBE/UI/ToDoItems/ToDoExplorerDockablePresenter.cs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,20 @@ public class ToDoExplorerDockablePresenter : DockablePresenterBase
2020
{
2121
private readonly IRubberduckParser _parser;
2222
private readonly IEnumerable<ToDoMarker> _markers;
23-
private GridViewSort<ToDoItem> _gridViewSort;
24-
private IToDoExplorerWindow Control { get { return UserControl as IToDoExplorerWindow; } }
23+
private readonly GridViewSort<ToDoItem> _gridViewSort;
24+
private readonly IToDoExplorerWindow _view;
2525

2626
public ToDoExplorerDockablePresenter(IRubberduckParser parser, IEnumerable<ToDoMarker> markers, VBE vbe, AddIn addin, IToDoExplorerWindow window, GridViewSort<ToDoItem> gridViewSort)
2727
: base(vbe, addin, window)
2828
{
2929
_parser = parser;
3030
_markers = markers;
3131
_gridViewSort = gridViewSort;
32-
Control.NavigateToDoItem += NavigateToDoItem;
33-
Control.RefreshToDoItems += RefreshToDoList;
34-
Control.SortColumn += SortColumn;
32+
33+
_view = window;
34+
_view.NavigateToDoItem += NavigateToDoItem;
35+
_view.RefreshToDoItems += RefreshToDoList;
36+
_view.SortColumn += SortColumn;
3537
}
3638

3739
public override void Show()
@@ -45,12 +47,12 @@ public async void Refresh()
4547
try
4648
{
4749
Cursor.Current = Cursors.WaitCursor;
48-
Control.TodoItems = await GetItems();
50+
_view.TodoItems = await GetItems();
4951
}
5052
finally
5153
{
52-
Cursor.Current = Cursors.Default;
53-
}
54+
Cursor.Current = Cursors.Default;
55+
}
5456
}
5557

5658
private void RefreshToDoList(object sender, EventArgs e)
@@ -60,9 +62,9 @@ private void RefreshToDoList(object sender, EventArgs e)
6062

6163
private void SortColumn(object sender, DataGridViewCellMouseEventArgs e)
6264
{
63-
var columnName = Control.GridView.Columns[e.ColumnIndex].Name;
65+
var columnName = _view.GridView.Columns[e.ColumnIndex].Name;
6466

65-
Control.TodoItems = _gridViewSort.Sort(Control.TodoItems, columnName);
67+
_view.TodoItems = _gridViewSort.Sort(_view.TodoItems, columnName);
6668
}
6769

6870
private async Task<IOrderedEnumerable<ToDoItem>> GetItems()

RetailCoder.VBE/UI/ToDoItems/ToDoExplorerWindow.cs

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
using System;
22
using System.Collections.Generic;
33
using System.ComponentModel;
4+
using System.Diagnostics.CodeAnalysis;
45
using System.Linq;
56
using System.Windows.Forms;
67
using Rubberduck.ToDoItems;
78

89
namespace Rubberduck.UI.ToDoItems
910
{
11+
[ExcludeFromCodeCoverage]
1012
public partial class ToDoExplorerWindow : UserControl, IToDoExplorerWindow
1113
{
1214
private const string ClassId = "8B071EDA-2C9C-4009-9A22-A1958BF98B28";
@@ -67,38 +69,32 @@ private void ToDoGridViewCellDoubleClicked(object sender, DataGridViewCellEventA
6769
}
6870

6971
var handler = NavigateToDoItem;
70-
if (handler == null)
72+
if (handler != null)
7173
{
72-
return;
74+
var item = (ToDoItem)todoItemsGridView[e.ColumnIndex, e.RowIndex].OwningRow.DataBoundItem;
75+
var args = new ToDoItemClickEventArgs(item);
76+
handler(this, args);
7377
}
74-
75-
var item = (ToDoItem)todoItemsGridView[e.ColumnIndex, e.RowIndex].OwningRow.DataBoundItem;
76-
var args = new ToDoItemClickEventArgs(item);
77-
handler(this, args);
7878
}
7979

8080
public event EventHandler RefreshToDoItems;
8181
private void RefreshButtonClicked(object sender, EventArgs e)
8282
{
8383
var handler = RefreshToDoItems;
84-
if (handler == null)
84+
if (handler != null)
8585
{
86-
return;
87-
}
88-
89-
handler(this, EventArgs.Empty);
86+
handler(this, EventArgs.Empty);
87+
}
9088
}
9189

9290
public event EventHandler<DataGridViewCellMouseEventArgs> SortColumn;
9391
private void ColumnHeaderMouseClicked(object sender, DataGridViewCellMouseEventArgs e)
9492
{
9593
var handler = SortColumn;
96-
if (handler == null)
94+
if (handler != null)
9795
{
98-
return;
99-
}
100-
101-
handler(this, e);
96+
handler(this, e);
97+
}
10298
}
10399
}
104100
}

RetailCoder.VBE/UnitTesting/NewUnitTestModuleCommand.cs

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,12 @@
11
using System;
2-
using System.IO;
32
using System.Linq;
4-
using System.Reflection;
53
using Microsoft.Vbe.Interop;
64
using Rubberduck.VBEditor.Extensions;
75

86
namespace Rubberduck.UnitTesting
97
{
108
public static class NewUnitTestModuleCommand
119
{
12-
public static void EnsureReferenceToAddInLibrary(this VBProject project)
13-
{
14-
var assembly = Assembly.GetExecutingAssembly();
15-
16-
var name = assembly.GetName().Name.Replace('.', '_');
17-
var referencePath = Path.ChangeExtension(assembly.Location, ".tlb");
18-
19-
var references = project.References.Cast<Reference>().ToList();
20-
21-
var reference = references.SingleOrDefault(r => r.Name == name);
22-
if (reference != null)
23-
{
24-
references.Remove(reference);
25-
project.References.Remove(reference);
26-
}
27-
28-
if (references.All(r => r.FullPath != referencePath))
29-
{
30-
project.References.AddFromFile(referencePath);
31-
}
32-
}
33-
3410
private static readonly string TestModuleEmptyTemplate = String.Concat(
3511
"'@TestModule\n"
3612
, "'' uncomment for late-binding:\n"
@@ -82,6 +58,7 @@ public static void NewUnitTestModule(VBE vbe)
8258
}
8359
catch (Exception exception)
8460
{
61+
//can we please comment when we swallow every possible exception?
8562
}
8663
}
8764

RetailCoder.VBE/UnitTesting/ProjectTestExtensions.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
using Rubberduck.Parsing.Reflection;
77
using Rubberduck.Reflection;
88
using Rubberduck.VBEditor.Extensions;
9-
using Rubberduck.VBEditor.VBEHost;
9+
using System.Reflection;
10+
using System.IO;
1011

1112
namespace Rubberduck.UnitTesting
1213
{
@@ -87,5 +88,27 @@ private static bool IsTestMethod(Member member)
8788

8889
return result;
8990
}
91+
92+
public static void EnsureReferenceToAddInLibrary(this VBProject project)
93+
{
94+
var assembly = Assembly.GetExecutingAssembly();
95+
96+
var name = assembly.GetName().Name.Replace('.', '_');
97+
var referencePath = Path.ChangeExtension(assembly.Location, ".tlb");
98+
99+
var references = project.References.Cast<Reference>().ToList();
100+
101+
var reference = references.SingleOrDefault(r => r.Name == name);
102+
if (reference != null)
103+
{
104+
references.Remove(reference);
105+
project.References.Remove(reference);
106+
}
107+
108+
if (references.All(r => r.FullPath != referencePath))
109+
{
110+
project.References.AddFromFile(referencePath);
111+
}
112+
}
90113
}
91114
}

RetailCoder.VBE/UnitTesting/TestEngine.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ private void RunMethodCleanup(QualifiedModuleName qualifiedModuleName)
8484

8585
public void Run(IEnumerable<TestMethod> tests, VBProject project)
8686
{
87+
//todo: move this to the "UI" layer. This code doesn't have to run for COM clients.
88+
// COM clients will have to either already have a good reference, or be late bound.
89+
// This is problematic for late bound code, because now we've *forced* them into early binding.
8790
project.EnsureReferenceToAddInLibrary();
8891

8992
var testMethods = tests as IList<TestMethod> ?? tests.ToList();

Rubberduck.Parsing/VBA/RubberduckParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ private void parseResult_Progress(object sender, ResolutionProgressEventArgs e)
9494
OnResolveProgress(e.Component);
9595
}
9696

97-
private IParseTree Parse(string code, out ITokenStream outStream)
97+
public IParseTree Parse(string code, out ITokenStream outStream)
9898
{
9999
var input = new AntlrInputStream(code);
100100
var lexer = new VBALexer(input);

RubberduckTests/Mocks/MockFactory.cs

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
using System;
2+
using System.Collections;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using Microsoft.Vbe.Interop;
8+
using Moq;
9+
10+
namespace RubberduckTests.Mocks
11+
{
12+
static class MockFactory
13+
{
14+
internal static Mock<Window> CreateWindowMock()
15+
{
16+
var window = new Mock<Window>();
17+
window.SetupProperty(w => w.Visible, false);
18+
window.SetupGet(w => w.LinkedWindows).Returns((LinkedWindows) null);
19+
window.SetupProperty(w => w.Height);
20+
window.SetupProperty(w => w.Width);
21+
22+
return window;
23+
}
24+
25+
internal static Mock<VBE> CreateVbeMock(Windows windows)
26+
{
27+
var vbe = new Mock<VBE>();
28+
vbe.Setup(v => v.Windows).Returns(windows);
29+
30+
return vbe;
31+
}
32+
33+
internal static Mock<VBE> CreateVbeMock(Windows windows, VBProjects projects)
34+
{
35+
var vbe = CreateVbeMock(windows);
36+
vbe.SetupGet(v => v.VBProjects).Returns(projects);
37+
38+
return vbe;
39+
}
40+
41+
internal static Mock<CodeModule> CreateCodeModuleMock(string code)
42+
{
43+
var lineCount = code.Split(new string[] { Environment.NewLine }, StringSplitOptions.None).Length;
44+
45+
var codeModule = new Mock<CodeModule>();
46+
codeModule.SetupGet(c => c.CountOfLines).Returns(lineCount);
47+
codeModule.SetupGet(c => c.get_Lines(1, lineCount)).Returns(code);
48+
return codeModule;
49+
}
50+
51+
internal static Mock<VBComponent> CreateComponentMock(string name, CodeModule codeModule, vbext_ComponentType componentType)
52+
{
53+
var component = new Mock<VBComponent>();
54+
component.SetupProperty(c => c.Name, name);
55+
component.SetupGet(c => c.CodeModule).Returns(codeModule);
56+
component.SetupGet(c => c.Type).Returns(componentType);
57+
return component;
58+
}
59+
60+
internal static Mock<VBComponents> CreateComponentsMock(List<VBComponent> componentList, VBProject project)
61+
{
62+
var components = new Mock<VBComponents>();
63+
components.Setup(c => c.GetEnumerator()).Returns(componentList.GetEnumerator());
64+
components.As<IEnumerable>().Setup(c => c.GetEnumerator()).Returns(componentList.GetEnumerator());
65+
components.SetupGet(c => c.Parent).Returns(project);
66+
67+
return components;
68+
}
69+
70+
internal static Mock<VBProject> CreateProjectMock(string name, vbext_ProjectProtection protectionLevel)
71+
{
72+
var project = new Mock<VBProject>();
73+
project.SetupProperty(p => p.Name, name);
74+
project.SetupGet(p => p.Protection).Returns(protectionLevel);
75+
return project;
76+
}
77+
78+
internal static Mock<VBProjects> CreateProjectsMock(List<VBProject> projectList, VBProject project)
79+
{
80+
var projects = new Mock<VBProjects>();
81+
projects.Setup(p => p.GetEnumerator()).Returns(projectList.GetEnumerator());
82+
projects.As<IEnumerable>().Setup(p => p.GetEnumerator()).Returns(projectList.GetEnumerator());
83+
84+
return projects;
85+
}
86+
87+
//internal static Mock<VBProjects> CreateProjectsMock(List<VBProject> projectList, VBProject project, VBComponents components)
88+
//{
89+
// CreateProjectsMock(projectList, project);
90+
// project.SetupGet(p => p.VBComponents).Returns(components.Object);
91+
// return projects;
92+
//}
93+
}
94+
}

RubberduckTests/RubberduckTests.csproj

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,10 @@
145145
<Reference Include="Moq">
146146
<HintPath>..\packages\Moq.4.2.1409.1722\lib\net40\Moq.dll</HintPath>
147147
</Reference>
148+
<Reference Include="NLog, Version=3.2.1.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
149+
<HintPath>..\packages\NLog.3.2.1\lib\net45\NLog.dll</HintPath>
150+
<Private>True</Private>
151+
</Reference>
148152
<Reference Include="Office, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
149153
<SpecificVersion>False</SpecificVersion>
150154
<EmbedInteropTypes>True</EmbedInteropTypes>
@@ -172,6 +176,7 @@
172176
</Otherwise>
173177
</Choose>
174178
<ItemGroup>
179+
<Compile Include="Mocks\MockFactory.cs" />
175180
<Compile Include="Mocks\MockTodoSettingsView.cs" />
176181
<Compile Include="Mocks\MockWindowsCollection.cs" />
177182
<Compile Include="SourceControl\ChangesPresenterTests.cs" />
@@ -181,7 +186,8 @@
181186
<Compile Include="StringExtensionsTests.cs" />
182187
<Compile Include="Properties\AssemblyInfo.cs" />
183188
<Compile Include="ConfigurationTests.cs" />
184-
<Compile Include="AssertTests.cs" />
189+
<Compile Include="TodoExplorerTests.cs" />
190+
<Compile Include="UnitTesting\AssertTests.cs" />
185191
<Compile Include="CodeInspectionTests.cs" />
186192
<Compile Include="TodoControllerTests.cs" />
187193
<Compile Include="ComponentTypeExtensionTests.cs" />

RubberduckTests/SourceControl/SCPresenterTests.cs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,9 @@ public class ScPresenterTests
4343
[TestInitialize]
4444
public void InitializeMocks()
4545
{
46-
_window = new Mock<Window>();
47-
_window.SetupProperty(w => w.Visible, false);
48-
_window.SetupGet(w => w.LinkedWindows).Returns((LinkedWindows)null);
49-
_window.SetupProperty(w => w.Height);
50-
_window.SetupProperty(w => w.Width);
51-
46+
_window = Mocks.MockFactory.CreateWindowMock();
5247
_windows = new MockWindowsCollection(_window.Object);
53-
54-
_vbe = new Mock<VBE>();
55-
_vbe.Setup(v => v.Windows).Returns(_windows);
48+
_vbe = Mocks.MockFactory.CreateVbeMock(_windows);
5649

5750
_addIn = new Mock<AddIn>();
5851

0 commit comments

Comments
 (0)