Skip to content

Commit d4e6218

Browse files
authored
Merge pull request #1937 from paulvanbrenk/UnitTestJavaScriptPhase1
Add support for using javascript unit tests in other project types
2 parents 0bd757f + 53ebde8 commit d4e6218

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1087
-821
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
2+
3+
using System;
4+
using Microsoft.VisualStudio;
5+
using Microsoft.VisualStudio.OLE.Interop;
6+
using OleConstants = Microsoft.VisualStudio.OLE.Interop.Constants;
7+
using VsCommands2K = Microsoft.VisualStudio.VSConstants.VSStd2KCmdID;
8+
9+
namespace Microsoft.VisualStudioTools
10+
{
11+
internal static partial class CommonConstants
12+
{
13+
//"Open Folder in Windows Explorer" command ID.
14+
//Don't change this! This is Visual Studio constant.
15+
public const VsCommands2K OpenFolderInExplorerCmdId = (VsCommands2K)1635;
16+
17+
//These are VS internal constants - don't change them
18+
public static Guid Std97CmdGroupGuid = typeof(VSConstants.VSStd97CmdID).GUID;
19+
public static Guid Std2KCmdGroupGuid = typeof(VSConstants.VSStd2KCmdID).GUID;
20+
21+
//Command statuses
22+
public const int NotSupportedInvisibleCmdStatus = (int)OleConstants.OLECMDERR_E_NOTSUPPORTED |
23+
(int)OleConstants.OLECMDSTATE_INVISIBLE;
24+
public const int SupportedEnabledCmdStatus = (int)(OLECMDF.OLECMDF_SUPPORTED |
25+
OLECMDF.OLECMDF_ENABLED);
26+
public const int SupportedCmdStatus = (int)OLECMDF.OLECMDF_SUPPORTED;
27+
}
28+
}

Common/Product/SharedProject/CommonConstants.cs

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
22

33
using System;
4-
using Microsoft.VisualStudio;
5-
using Microsoft.VisualStudio.OLE.Interop;
6-
using OleConstants = Microsoft.VisualStudio.OLE.Interop.Constants;
7-
using VsCommands2K = Microsoft.VisualStudio.VSConstants.VSStd2KCmdID;
84

95
namespace Microsoft.VisualStudioTools
106
{
11-
internal static class CommonConstants
7+
internal static partial class CommonConstants
128
{
139
/// <summary>
1410
/// <see cref="VsConstants.UICONTEXT_NoSolution"/>.
@@ -58,10 +54,6 @@ internal static class CommonConstants
5854
//Working Directory project property
5955
public const string WorkingDirectory = "WorkingDirectory";
6056

61-
//"Open Folder in Windows Explorer" command ID.
62-
//Don't change this! This is Visual Studio constant.
63-
public const VsCommands2K OpenFolderInExplorerCmdId = (VsCommands2K)1635;
64-
6557
//Sort priority for the Working Directory node
6658
//We want this node to be the first node in the Search Path subtree
6759
public const int WorkingDirectorySortPriority = 100;
@@ -79,17 +71,6 @@ internal static class CommonConstants
7971

8072
public const string PublishUrl = "PublishUrl";
8173

82-
//These are VS internal constants - don't change them
83-
public static Guid Std97CmdGroupGuid = typeof(VSConstants.VSStd97CmdID).GUID;
84-
public static Guid Std2KCmdGroupGuid = typeof(VSConstants.VSStd2KCmdID).GUID;
85-
86-
//Command statuses
87-
public const int NotSupportedInvisibleCmdStatus = (int)OleConstants.OLECMDERR_E_NOTSUPPORTED |
88-
(int)OleConstants.OLECMDSTATE_INVISIBLE;
89-
public const int SupportedEnabledCmdStatus = (int)(OLECMDF.OLECMDF_SUPPORTED |
90-
OLECMDF.OLECMDF_ENABLED);
91-
public const int SupportedCmdStatus = (int)OLECMDF.OLECMDF_SUPPORTED;
92-
9374
/// <summary>
9475
/// Show all files is enabled, we show the merged view of project + files
9576
/// </summary>

Common/Product/SharedProject/ProcessOutput.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ internal abstract class Redirector
2727
/// <param name="line">The line of text, not including the newline. This
2828
/// is never null.</param>
2929
public abstract void WriteLine(string line);
30+
3031
/// <summary>
3132
/// Called when a line is written to standard error.
3233
/// </summary>
@@ -548,7 +549,7 @@ private void OnErrorDataReceived(object sender, DataReceivedEventArgs e)
548549
}
549550
if (this.redirector != null)
550551
{
551-
this.redirector.WriteLine(line);
552+
this.redirector.WriteErrorLine(line);
552553
}
553554
}
554555
}

Nodejs/Product/Nodejs/Nodejs.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77
using System.Windows.Forms;
88
#endif
99
using Microsoft.Win32;
10-
//using Microsoft.VisualStudio.Shell;
11-
//using Microsoft.VisualStudio.Shell.Interop;
10+
1211
#if !NO_WINDOWS
1312
using Microsoft.NodejsTools.Project;
1413
#endif
1514
using Microsoft.VisualStudioTools;
15+
//using Microsoft.VisualStudio.Shell;
16+
//using Microsoft.VisualStudio.Shell.Interop;
1617

1718
namespace Microsoft.NodejsTools
1819
{

Nodejs/Product/Nodejs/Nodejs.csproj

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,6 @@
101101
<Reference Include="Microsoft.VisualStudio.CommandBars, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
102102
<EmbedInteropTypes>False</EmbedInteropTypes>
103103
</Reference>
104-
<Reference Include="Microsoft.Build, Version=$(MicrosoftBuildAssemblyVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
105-
<Reference Include="Microsoft.Build.Conversion.$(MicrosoftBuildAssemblyVersionSuffix), Version=$(MicrosoftBuildAssemblyVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
106-
<Reference Include="Microsoft.Build.Engine, Version=$(MicrosoftBuildAssemblyVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
107-
<Reference Include="Microsoft.Build.Framework, Version=$(MicrosoftBuildAssemblyVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
108-
<Reference Include="Microsoft.Build.Tasks.$(MicrosoftBuildAssemblyVersionSuffix), Version=$(MicrosoftBuildAssemblyVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
109-
<Reference Include="Microsoft.Build.Utilities.$(MicrosoftBuildAssemblyVersionSuffix), Version=$(MicrosoftBuildAssemblyVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
110104
<Reference Include="Microsoft.CSharp" />
111105
<Reference Include="Microsoft.JScript" />
112106
<Reference Include="microsoft.msxml, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
@@ -175,6 +169,9 @@
175169
<Compile Include="..\..\..\Common\Product\SharedProject\CommonConstants.cs">
176170
<Link>SharedProject\CommonConstants.cs</Link>
177171
</Compile>
172+
<Compile Include="..\..\..\Common\Product\SharedProject\CommonConstants.VS.cs">
173+
<Link>SharedProject\CommonConstants.VS.cs</Link>
174+
</Compile>
178175
<Compile Include="..\..\..\Common\Product\SharedProject\CommonUtils.cs">
179176
<Link>SharedProject\CommonUtils.cs</Link>
180177
</Compile>
@@ -1204,6 +1201,15 @@
12041201
<PackageReference Include="MicroBuild.Core">
12051202
<Version>0.3.0</Version>
12061203
</PackageReference>
1204+
<PackageReference Include="Microsoft.Build">
1205+
<Version>15.6.82</Version>
1206+
</PackageReference>
1207+
<PackageReference Include="Microsoft.Build.Framework">
1208+
<Version>15.6.82</Version>
1209+
</PackageReference>
1210+
<PackageReference Include="Microsoft.Build.Utilities.Core">
1211+
<Version>15.6.82</Version>
1212+
</PackageReference>
12071213
<PackageReference Include="Microsoft.VisualStudio.AppDesigner">
12081214
<Version>15.3.0-rc-6162104</Version>
12091215
</PackageReference>

Nodejs/Product/Nodejs/NodejsConstants.cs

Lines changed: 52 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -7,46 +7,46 @@ namespace Microsoft.NodejsTools
77
{
88
internal static class NodejsConstants
99
{
10-
internal const string JavaScriptExtension = ".js";
11-
internal const string JavaScriptJsxExtension = ".jsx";
12-
internal const string TypeScriptExtension = ".ts";
13-
internal const string TypeScriptJsxExtension = ".tsx";
14-
internal const string TypeScriptDeclarationExtension = ".d.ts";
15-
internal const string MapExtension = ".map";
16-
internal const string NodejsProjectExtension = ".njsproj";
17-
18-
internal const string JavaScript = "JavaScript";
19-
internal const string CSS = "CSS";
20-
internal const string HTML = "HTML";
21-
internal const string Nodejs = "Node.js";
22-
23-
internal const string ProjectFileFilter = "Node.js Project File (*.njsproj)\n*.njsproj\nAll Files (*.*)\n*.*\n";
24-
25-
internal const string NodeModulesFolder = "node_modules";
26-
internal const string NodeModulesFolderWithSeparators = "\\" + NodeModulesFolder + "\\";
27-
internal const string NodeModulesStagingFolder = "node_modules\\.staging\\";
28-
internal const string BowerComponentsFolder = "bower_components";
10+
public const string JavaScriptExtension = ".js";
11+
public const string JavaScriptJsxExtension = ".jsx";
12+
public const string TypeScriptExtension = ".ts";
13+
public const string TypeScriptJsxExtension = ".tsx";
14+
public const string TypeScriptDeclarationExtension = ".d.ts";
15+
public const string MapExtension = ".map";
16+
public const string NodejsProjectExtension = ".njsproj";
17+
18+
public const string JavaScript = "JavaScript";
19+
public const string CSS = "CSS";
20+
public const string HTML = "HTML";
21+
public const string Nodejs = "Node.js";
22+
23+
public const string ProjectFileFilter = "Node.js Project File (*.njsproj)\n*.njsproj\nAll Files (*.*)\n*.*\n";
24+
25+
public const string NodeModulesFolder = "node_modules";
26+
public const string NodeModulesFolderWithSeparators = "\\" + NodeModulesFolder + "\\";
27+
public const string NodeModulesStagingFolder = "node_modules\\.staging\\";
28+
public const string BowerComponentsFolder = "bower_components";
2929

3030
/// <summary>
3131
/// The name of the package.json file
3232
/// </summary>
33-
internal const string PackageJsonFile = "package.json";
34-
internal const string PackageJsonMainFileKey = "main";
35-
internal const string DefaultPackageMainFile = "index.js";
33+
public const string PackageJsonFile = "package.json";
34+
public const string PackageJsonMainFileKey = "main";
35+
public const string DefaultPackageMainFile = "index.js";
3636

37-
internal const string TsConfigJsonFile = "tsconfig.json";
38-
internal const string JsConfigJsonFile = "jsconfig.json";
37+
public const string TsConfigJsonFile = "tsconfig.json";
38+
public const string JsConfigJsonFile = "jsconfig.json";
3939

40-
internal const string BaseRegistryKey = "NodejsTools";
40+
public const string BaseRegistryKey = "NodejsTools";
4141

42-
internal const ushort DefaultDebuggerPort = 5858;
42+
public const ushort DefaultDebuggerPort = 5858;
4343

44-
internal const string TypeScriptCompileItemType = "TypeScriptCompile";
45-
internal const string CommonJSModuleKind = "CommonJS";
46-
internal const string TypeScript = "TypeScript";
44+
public const string TypeScriptCompileItemType = "TypeScriptCompile";
45+
public const string CommonJSModuleKind = "CommonJS";
46+
public const string TypeScript = "TypeScript";
4747

48-
internal const string NodeToolsProcessIdEnvironmentVariable = "_NTVS_PID";
49-
internal const string NodeToolsVsInstallRootEnvironmentVariable = "_NTVS_VSINSTALLROOT";
48+
public const string NodeToolsProcessIdEnvironmentVariable = "_NTVS_PID";
49+
public const string NodeToolsVsInstallRootEnvironmentVariable = "_NTVS_VSINSTALLROOT";
5050

5151
public static string NtvsLocalAppData => Path.Combine(
5252
System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData),
@@ -65,30 +65,35 @@ internal static class NodejsConstants
6565
/// <summary>
6666
/// Checks whether a relative and double-backslashed seperated path contains a folder name.
6767
/// </summary>
68-
internal static bool ContainsNodeModulesOrBowerComponentsFolder(string path)
68+
public static bool ContainsNodeModulesOrBowerComponentsFolder(string path)
6969
{
7070
var tmp = "\\" + path + "\\";
7171
return tmp.IndexOf("\\" + NodeModulesFolder + "\\", StringComparison.OrdinalIgnoreCase) >= 0
7272
|| tmp.IndexOf("\\" + BowerComponentsFolder + "\\", StringComparison.OrdinalIgnoreCase) >= 0;
7373
}
74+
75+
public const string ExecutorUriString = "executor://NodejsTestExecutor/v1";
76+
public static readonly Uri ExecutorUri = new Uri(ExecutorUriString);
7477
}
7578

7679
internal static class NodeProjectProperty
7780
{
78-
internal const string DebuggerPort = "DebuggerPort";
79-
internal const string EnableTypeScript = "EnableTypeScript";
80-
internal const string Environment = "Environment";
81-
internal const string EnvironmentVariables = "EnvironmentVariables";
82-
internal const string LaunchUrl = "LaunchUrl";
83-
internal const string NodeExeArguments = "NodeExeArguments";
84-
internal const string NodeExePath = "NodeExePath";
85-
internal const string NodejsPort = "NodejsPort";
86-
internal const string ScriptArguments = "ScriptArguments";
87-
internal const string StartWebBrowser = "StartWebBrowser";
88-
internal const string TypeScriptCfgProperty = "CfgPropertyPagesGuidsAddTypeScript";
89-
internal const string TypeScriptModuleKind = "TypeScriptModuleKind";
90-
internal const string TypeScriptOutDir = "TypeScriptOutDir";
91-
internal const string TypeScriptSourceMap = "TypeScriptSourceMap";
92-
internal const string SaveNodeJsSettingsInProjectFile = "SaveNodeJsSettingsInProjectFile";
81+
public const string DebuggerPort = "DebuggerPort";
82+
public const string EnableTypeScript = "EnableTypeScript";
83+
public const string Environment = "Environment";
84+
public const string EnvironmentVariables = "EnvironmentVariables";
85+
public const string LaunchUrl = "LaunchUrl";
86+
public const string NodeExeArguments = "NodeExeArguments";
87+
public const string NodeExePath = "NodeExePath";
88+
public const string NodejsPort = "NodejsPort";
89+
public const string ScriptArguments = "ScriptArguments";
90+
public const string StartWebBrowser = "StartWebBrowser";
91+
public const string TypeScriptCfgProperty = "CfgPropertyPagesGuidsAddTypeScript";
92+
public const string TypeScriptModuleKind = "TypeScriptModuleKind";
93+
public const string TypeScriptOutDir = "TypeScriptOutDir";
94+
public const string TypeScriptSourceMap = "TypeScriptSourceMap";
95+
public const string SaveNodeJsSettingsInProjectFile = "SaveNodeJsSettingsInProjectFile";
96+
public const string TestRoot = "TestRoot";
97+
public const string TestFramework = "TestFramework";
9398
}
9499
}

Nodejs/Product/Nodejs/NodejsPackage.cs

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -128,20 +128,6 @@ protected override void Initialize()
128128
// The variable is inherited by child processes backing Test Explorer, and is used in
129129
// the NTVS test discoverer and test executor to connect back to VS.
130130
Environment.SetEnvironmentVariable(NodejsConstants.NodeToolsProcessIdEnvironmentVariable, Process.GetCurrentProcess().Id.ToString());
131-
132-
var devenvPath = Environment.GetEnvironmentVariable("VSAPPIDDIR");
133-
if (!string.IsNullOrEmpty(devenvPath))
134-
{
135-
try
136-
{
137-
var root = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(devenvPath), @"..\.."));
138-
Environment.SetEnvironmentVariable(NodejsConstants.NodeToolsVsInstallRootEnvironmentVariable, root);
139-
}
140-
catch (Exception)
141-
{
142-
// noop
143-
}
144-
}
145131
}
146132

147133
private void SubscribeToVsCommandEvents(

Nodejs/Product/Nodejs/Project/NodejsFileNodeProperties.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
1+
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
22

33
using System;
44
using System.ComponentModel;
@@ -101,8 +101,7 @@ public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo c
101101

102102
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
103103
{
104-
var discover = new TestFrameworkDirectories();
105-
var knownFrameworkList = discover.GetFrameworkNames();
104+
var knownFrameworkList = TestFrameworkDirectories.GetFrameworkNames();
106105
return new StandardValuesCollection(knownFrameworkList);
107106
}
108107
}

Nodejs/Product/Nodejs/Project/NodejsGeneralPropertyPage.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ protected override void Apply()
5656
this.Project.SetProjectProperty(CommonConstants.WorkingDirectory, this.control.WorkingDirectory);
5757
this.Project.SetProjectProperty(NodeProjectProperty.LaunchUrl, this.control.LaunchUrl);
5858
this.Project.SetProjectProperty(NodeProjectProperty.Environment, this.control.Environment);
59+
this.Project.SetProjectProperty(NodeProjectProperty.TestRoot, this.control.TestRoot);
60+
this.Project.SetProjectProperty(NodeProjectProperty.TestFramework, this.control.TestFramework);
5961

6062
var saveNodeSettingsInProject = this.control.SaveNodeSettingsInProject;
6163

@@ -109,6 +111,8 @@ public override void LoadSettings()
109111
this.control.Environment = this.Project.GetUnevaluatedProperty(NodeProjectProperty.Environment);
110112
this.control.StartWebBrowser = GetBoolProperty(this.Project, NodeProjectProperty.StartWebBrowser);
111113
this.control.SaveNodeSettingsInProject = GetBoolProperty(this.Project, NodeProjectProperty.SaveNodeJsSettingsInProjectFile);
114+
this.control.TestRoot = this.Project.GetProjectProperty(NodeProjectProperty.TestRoot);
115+
this.control.TestFramework = this.Project.GetProjectProperty(NodeProjectProperty.TestFramework);
112116

113117
bool GetBoolProperty(ProjectNode node, string property)
114118
{

0 commit comments

Comments
 (0)