Skip to content

Commit 6dc85aa

Browse files
committed
Activates necessary document before running methods
Fixes #1771 Allows for unit tests in Word Templates.
1 parent b397407 commit 6dc85aa

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

Rubberduck.VBEEditor/VBEHost/WordApp.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using Microsoft.Vbe.Interop;
2+
using Microsoft.Office.Interop.Word;
3+
using System.Linq;
24

35
namespace Rubberduck.VBEditor.VBEHost
46
{
@@ -10,13 +12,35 @@ public WordApp(VBE vbe) : base(vbe, "Word") { }
1012
public override void Run(QualifiedMemberName qualifiedMemberName)
1113
{
1214
var call = GenerateMethodCall(qualifiedMemberName);
13-
Application.Run(call);
15+
16+
ActivateProjectDocument(qualifiedMemberName);
17+
//Prevent TE hanging should Application.Run fail
18+
try
19+
{
20+
Application.Run(call);
21+
}
22+
//TODO - Let TestEngine know that the method failed
23+
catch { };
1424
}
1525

1626
protected virtual string GenerateMethodCall(QualifiedMemberName qualifiedMemberName)
1727
{
1828
var moduleName = qualifiedMemberName.QualifiedModuleName.Component.Name;
1929
return string.Concat(moduleName, ".", qualifiedMemberName.MemberName);
2030
}
31+
32+
protected virtual void ActivateProjectDocument(QualifiedMemberName qualifiedMemberName)
33+
{
34+
// Word requires that the document be active for Application.Run to find the target Method in scope.
35+
// Check the project's document or a document referring to a project's template is active.
36+
var activeDoc = Application.ActiveDocument;
37+
var template = activeDoc.get_AttachedTemplate();
38+
var targetDoc = Application.Documents.Cast<Document>()
39+
.FirstOrDefault(doc => doc.Name == qualifiedMemberName.QualifiedModuleName.ProjectDisplayName
40+
|| doc.get_AttachedTemplate().Name == qualifiedMemberName.QualifiedModuleName.ProjectDisplayName);
41+
if (activeDoc != targetDoc) {
42+
targetDoc.Activate();
43+
}
44+
}
2145
}
2246
}

0 commit comments

Comments
 (0)