mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-06-11 12:14:53 +08:00
Add run as admin context menu item for application results returned by the Indexer Plugin (#4807)
* Added run as admin context menu item to apps returned by indexer plugin * Added a test and localized strings * localize strings * Add more tests for folder and other file types * fixed run as admin -> run as administrator * resolved merge conflict * refactored tests * moved common code to helper and added logs * moved start process to the helper class * added more info in a comment * fixed count in tests as open in console was added * removed additional code that was added while fixing merge conflicts
This commit is contained in:
parent
638cd1dd48
commit
411140c3ea
@ -6,8 +6,9 @@ using System.Windows;
|
|||||||
using Wox.Infrastructure.Logger;
|
using Wox.Infrastructure.Logger;
|
||||||
using Wox.Plugin;
|
using Wox.Plugin;
|
||||||
using Microsoft.Plugin.Indexer.SearchHelper;
|
using Microsoft.Plugin.Indexer.SearchHelper;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using Wox.Infrastructure;
|
using Wox.Infrastructure;
|
||||||
|
|
||||||
namespace Microsoft.Plugin.Indexer
|
namespace Microsoft.Plugin.Indexer
|
||||||
@ -22,6 +23,9 @@ namespace Microsoft.Plugin.Indexer
|
|||||||
File
|
File
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Extensions for adding run as admin context menu item for applications
|
||||||
|
private readonly string[] appExtensions = { ".exe", ".bat", ".appref-ms", ".lnk" };
|
||||||
|
|
||||||
public ContextMenuLoader(PluginInitContext context)
|
public ContextMenuLoader(PluginInitContext context)
|
||||||
{
|
{
|
||||||
_context = context;
|
_context = context;
|
||||||
@ -39,6 +43,12 @@ namespace Microsoft.Plugin.Indexer
|
|||||||
contextMenus.Add(CreateOpenContainingFolderResult(record));
|
contextMenus.Add(CreateOpenContainingFolderResult(record));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test to check if File can be Run as admin, if yes, we add a 'run as admin' context menu item
|
||||||
|
if(CanFileBeRunAsAdmin(record.Path))
|
||||||
|
{
|
||||||
|
contextMenus.Add(CreateRunAsAdminContextMenu(record));
|
||||||
|
}
|
||||||
|
|
||||||
contextMenus.Add(new ContextMenuResult
|
contextMenus.Add(new ContextMenuResult
|
||||||
{
|
{
|
||||||
PluginName = Assembly.GetExecutingAssembly().GetName().Name,
|
PluginName = Assembly.GetExecutingAssembly().GetName().Name,
|
||||||
@ -98,8 +108,51 @@ namespace Microsoft.Plugin.Indexer
|
|||||||
}
|
}
|
||||||
|
|
||||||
return contextMenus;
|
return contextMenus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Function to add the context menu item to run as admin
|
||||||
|
private ContextMenuResult CreateRunAsAdminContextMenu(SearchResult record)
|
||||||
|
{
|
||||||
|
return new ContextMenuResult
|
||||||
|
{
|
||||||
|
PluginName = Assembly.GetExecutingAssembly().GetName().Name,
|
||||||
|
Title = _context.API.GetTranslation("Microsoft_plugin_indexer_run_as_administrator"),
|
||||||
|
Glyph = "\xE7EF",
|
||||||
|
FontFamily = "Segoe MDL2 Assets",
|
||||||
|
AcceleratorKey = Key.Enter,
|
||||||
|
AcceleratorModifiers = (ModifierKeys.Control | ModifierKeys.Shift),
|
||||||
|
Action = _ =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Task.Run(() => Helper.RunAsAdmin(record.Path));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
Log.Exception($"|Microsoft.Plugin.Indexer.ContextMenu| Failed to run {record.Path} as admin, {e.Message}", e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to test if the file can be run as admin
|
||||||
|
private bool CanFileBeRunAsAdmin(string path)
|
||||||
|
{
|
||||||
|
string fileExtension = Path.GetExtension(path);
|
||||||
|
foreach(string extension in appExtensions)
|
||||||
|
{
|
||||||
|
if(extension.Equals(fileExtension, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private ContextMenuResult CreateOpenContainingFolderResult(SearchResult record)
|
private ContextMenuResult CreateOpenContainingFolderResult(SearchResult record)
|
||||||
{
|
{
|
||||||
return new ContextMenuResult
|
return new ContextMenuResult
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_copy_path">Copy path (Ctrl+C)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_copy_path">Copy path (Ctrl+C)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_open_containing_folder">Open containing folder (Ctrl+Shift+E)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_open_containing_folder">Open containing folder (Ctrl+Shift+E)</system:String>
|
||||||
|
<system:String x:Key="Microsoft_plugin_indexer_run_as_administrator">Run As Administrator (Ctrl+Shift+Enter)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_open_in_console">Open path in console (Ctrl+Shift+C)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_open_in_console">Open path in console (Ctrl+Shift+C)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_name">Name</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_name">Name</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_path">Path</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_path">Path</system:String>
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_copy_path">Copy path (Ctrl+C)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_copy_path">Copy path (Ctrl+C)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_open_containing_folder">Open containing folder (Ctrl+Shift+E)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_open_containing_folder">Open containing folder (Ctrl+Shift+E)</system:String>
|
||||||
|
<system:String x:Key="Microsoft_plugin_indexer_run_as_administrator">Run As Administrator (Ctrl+Shift+Enter)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_open_in_console">Open path in console (Ctrl+Shift+C)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_open_in_console">Open path in console (Ctrl+Shift+C)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_name">Name</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_name">Name</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_path">Path</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_path">Path</system:String>
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_copy_path">Copy path (Ctrl+C)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_copy_path">Copy path (Ctrl+C)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_open_containing_folder">Open containing folder (Ctrl+Shift+E)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_open_containing_folder">Open containing folder (Ctrl+Shift+E)</system:String>
|
||||||
|
<system:String x:Key="Microsoft_plugin_indexer_run_as_administrator">Run As Administrator (Ctrl+Shift+Enter)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_open_in_console">Open path in console (Ctrl+Shift+C)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_open_in_console">Open path in console (Ctrl+Shift+C)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_name">Name</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_name">Name</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_path">Path</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_path">Path</system:String>
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_copy_path">Copy path (Ctrl+C)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_copy_path">Copy path (Ctrl+C)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_open_containing_folder">Open containing folder (Ctrl+Shift+E)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_open_containing_folder">Open containing folder (Ctrl+Shift+E)</system:String>
|
||||||
|
<system:String x:Key="Microsoft_plugin_indexer_run_as_administrator">Run As Administrator (Ctrl+Shift+Enter)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_open_in_console">Open path in console (Ctrl+Shift+C)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_open_in_console">Open path in console (Ctrl+Shift+C)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_name">Name</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_name">Name</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_path">Path</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_path">Path</system:String>
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_copy_path">Copy path (Ctrl+C)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_copy_path">Copy path (Ctrl+C)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_open_containing_folder">Open containing folder (Ctrl+Shift+E)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_open_containing_folder">Open containing folder (Ctrl+Shift+E)</system:String>
|
||||||
|
<system:String x:Key="Microsoft_plugin_indexer_run_as_administrator">Run As Administrator (Ctrl+Shift+Enter)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_open_in_console">Open path in console (Ctrl+Shift+C)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_open_in_console">Open path in console (Ctrl+Shift+C)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_name">Name</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_name">Name</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_path">Path</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_path">Path</system:String>
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_copy_path">Copy path (Ctrl+C)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_copy_path">Copy path (Ctrl+C)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_open_containing_folder">Open containing folder (Ctrl+Shift+E)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_open_containing_folder">Open containing folder (Ctrl+Shift+E)</system:String>
|
||||||
|
<system:String x:Key="Microsoft_plugin_indexer_run_as_administrator">Run As Administrator (Ctrl+Shift+Enter)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_open_in_console">Open path in console (Ctrl+Shift+C)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_open_in_console">Open path in console (Ctrl+Shift+C)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_name">Name</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_name">Name</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_path">Path</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_path">Path</system:String>
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_copy_path">Copy path (Ctrl+C)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_copy_path">Copy path (Ctrl+C)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_open_containing_folder">Open containing folder (Ctrl+Shift+E)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_open_containing_folder">Open containing folder (Ctrl+Shift+E)</system:String>
|
||||||
|
<system:String x:Key="Microsoft_plugin_indexer_run_as_administrator">Run As Administrator (Ctrl+Shift+Enter)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_open_in_console">Open path in console (Ctrl+Shift+C)</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_open_in_console">Open path in console (Ctrl+Shift+C)</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_name">Name</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_name">Name</system:String>
|
||||||
<system:String x:Key="Microsoft_plugin_indexer_path">Path</system:String>
|
<system:String x:Key="Microsoft_plugin_indexer_path">Path</system:String>
|
||||||
|
@ -57,12 +57,6 @@
|
|||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
|
|
||||||
<_Parameter1>Wox.Test</_Parameter1>
|
|
||||||
</AssemblyAttribute>
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="Languages\de.xaml">
|
<Content Include="Languages\de.xaml">
|
||||||
@ -101,4 +95,11 @@
|
|||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
|
||||||
|
<_Parameter1>Wox.Test</_Parameter1>
|
||||||
|
</AssemblyAttribute>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -3,6 +3,7 @@ using System.Diagnostics;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Converters;
|
using Newtonsoft.Json.Converters;
|
||||||
|
using Wox.Infrastructure.Logger;
|
||||||
|
|
||||||
namespace Wox.Infrastructure
|
namespace Wox.Infrastructure
|
||||||
{
|
{
|
||||||
@ -76,6 +77,26 @@ namespace Wox.Infrastructure
|
|||||||
return formatted;
|
return formatted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Function to run as admin for context menu items
|
||||||
|
public static void RunAsAdmin(string path)
|
||||||
|
{
|
||||||
|
var info = new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = path,
|
||||||
|
WorkingDirectory = Path.GetDirectoryName(path),
|
||||||
|
Verb = "runas",
|
||||||
|
UseShellExecute = true
|
||||||
|
};
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Process.Start(info);
|
||||||
|
}
|
||||||
|
catch(System.Exception ex)
|
||||||
|
{
|
||||||
|
Log.Exception($"Wox.Infrastructure.Helper| Unable to Run {path} as admin : {ex.Message}", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
public static Process OpenInConsole(string path)
|
public static Process OpenInConsole(string path)
|
||||||
{
|
{
|
||||||
var processStartInfo = new ProcessStartInfo
|
var processStartInfo = new ProcessStartInfo
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data.OleDb;
|
|
||||||
using Microsoft.Search.Interop;
|
using Microsoft.Search.Interop;
|
||||||
using Microsoft.Plugin.Indexer.SearchHelper;
|
using Microsoft.Plugin.Indexer.SearchHelper;
|
||||||
using Microsoft.Plugin.Indexer.Interface;
|
using Microsoft.Plugin.Indexer.Interface;
|
||||||
using Moq;
|
|
||||||
using System.Linq;
|
|
||||||
using Microsoft.Plugin.Indexer;
|
using Microsoft.Plugin.Indexer;
|
||||||
|
using Moq;
|
||||||
using Wox.Plugin;
|
using Wox.Plugin;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace Wox.Test.Plugins
|
namespace Wox.Test.Plugins
|
||||||
{
|
{
|
||||||
@ -217,45 +216,86 @@ namespace Wox.Test.Plugins
|
|||||||
Assert.IsTrue(windowsSearchAPIResults.Any(x => x.Title == "file2.txt"));
|
Assert.IsTrue(windowsSearchAPIResults.Any(x => x.Title == "file2.txt"));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[TestCase("item.exe")]
|
||||||
public void ContextMenuLoader_ReturnContextMenuForFolderWithOpenInConsole_WhenLoadContextMenusIsCalled()
|
[TestCase("item.bat")]
|
||||||
|
[TestCase("item.appref-ms")]
|
||||||
|
[TestCase("item.lnk")]
|
||||||
|
public void LoadContextMenus_MustLoadAllItems_WhenFileIsAnApp(string path)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var mock = new Mock<IPublicAPI>();
|
var mockapi = new Mock<IPublicAPI>();
|
||||||
mock.Setup(api => api.GetTranslation(It.IsAny<string>())).Returns(It.IsAny<string>());
|
var pluginInitContext = new PluginInitContext() { API = mockapi.Object };
|
||||||
var pluginInitContext = new PluginInitContext() { API = mock.Object };
|
|
||||||
var contextMenuLoader = new ContextMenuLoader(pluginInitContext);
|
ContextMenuLoader _contextMenuLoader = new ContextMenuLoader(pluginInitContext);
|
||||||
var searchResult = new SearchResult() { Path = "C:/DummyFolder", Title = "DummyFolder" };
|
|
||||||
var result = new Result() { ContextData = searchResult };
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
List<ContextMenuResult> contextMenuResults = contextMenuLoader.LoadContextMenus(result);
|
Result result = new Result
|
||||||
|
{
|
||||||
|
ContextData = new SearchResult { Path = path }
|
||||||
|
};
|
||||||
|
|
||||||
|
List<ContextMenuResult> contextMenuItems = _contextMenuLoader.LoadContextMenus(result);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(contextMenuResults.Count, 2);
|
Assert.AreEqual(contextMenuItems.Count, 4);
|
||||||
mock.Verify(x => x.GetTranslation("Microsoft_plugin_indexer_copy_path"), Times.Once());
|
mockapi.Verify(m => m.GetTranslation("Microsoft_plugin_indexer_copy_path"), Times.Once());
|
||||||
mock.Verify(x => x.GetTranslation("Microsoft_plugin_indexer_open_in_console"), Times.Once());
|
mockapi.Verify(m => m.GetTranslation("Microsoft_plugin_indexer_run_as_administrator"), Times.Once());
|
||||||
|
mockapi.Verify(m => m.GetTranslation("Microsoft_plugin_indexer_open_containing_folder"), Times.Once());
|
||||||
|
mockapi.Verify(m => m.GetTranslation("Microsoft_plugin_indexer_open_in_console"), Times.Once());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[TestCase("item.pdf")]
|
||||||
public void ContextMenuLoader_ReturnContextMenuForFileWithOpenInConsole_WhenLoadContextMenusIsCalled()
|
[TestCase("item.xls")]
|
||||||
|
[TestCase("item.ppt")]
|
||||||
|
[TestCase("C:/DummyFile.cs")]
|
||||||
|
public void LoadContextMenus_MustNotLoadRunAsAdmin_WhenFileIsAnNotApp(string path)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var mock = new Mock<IPublicAPI>();
|
var mockapi = new Mock<IPublicAPI>();
|
||||||
mock.Setup(api => api.GetTranslation(It.IsAny<string>())).Returns(It.IsAny<string>());
|
var pluginInitContext = new PluginInitContext() { API = mockapi.Object };
|
||||||
var pluginInitContext = new PluginInitContext() { API = mock.Object };
|
|
||||||
var contextMenuLoader = new ContextMenuLoader(pluginInitContext);
|
ContextMenuLoader _contextMenuLoader = new ContextMenuLoader(pluginInitContext);
|
||||||
var searchResult = new SearchResult() { Path = "C:/DummyFile.cs", Title = "DummyFile.cs" };
|
|
||||||
var result = new Result() { ContextData = searchResult };
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
List<ContextMenuResult> contextMenuResults = contextMenuLoader.LoadContextMenus(result);
|
Result result = new Result
|
||||||
|
{
|
||||||
|
ContextData = new SearchResult { Path = path }
|
||||||
|
};
|
||||||
|
|
||||||
|
List<ContextMenuResult> contextMenuItems = _contextMenuLoader.LoadContextMenus(result);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(contextMenuResults.Count, 3);
|
Assert.AreEqual(contextMenuItems.Count, 3);
|
||||||
mock.Verify(x => x.GetTranslation("Microsoft_plugin_indexer_copy_path"), Times.Once());
|
mockapi.Verify(m => m.GetTranslation("Microsoft_plugin_indexer_copy_path"), Times.Once());
|
||||||
mock.Verify(x => x.GetTranslation("Microsoft_plugin_indexer_open_containing_folder"), Times.Once());
|
mockapi.Verify(m => m.GetTranslation("Microsoft_plugin_indexer_run_as_administrator"), Times.Never());
|
||||||
mock.Verify(x => x.GetTranslation("Microsoft_plugin_indexer_open_in_console"), Times.Once());
|
mockapi.Verify(m => m.GetTranslation("Microsoft_plugin_indexer_open_containing_folder"), Times.Once());
|
||||||
|
mockapi.Verify(m => m.GetTranslation("Microsoft_plugin_indexer_open_in_console"), Times.Once());
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase("C:/DummyFolder")]
|
||||||
|
[TestCase("TestFolder")]
|
||||||
|
public void LoadContextMenus_MustNotLoadRunAsAdminAndOpenContainingFolder_ForFolder(string path)
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var mockapi = new Mock<IPublicAPI>();
|
||||||
|
var pluginInitContext = new PluginInitContext() { API = mockapi.Object };
|
||||||
|
|
||||||
|
ContextMenuLoader _contextMenuLoader = new ContextMenuLoader(pluginInitContext);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
Result result = new Result
|
||||||
|
{
|
||||||
|
ContextData = new SearchResult { Path = path }
|
||||||
|
};
|
||||||
|
|
||||||
|
List<ContextMenuResult> contextMenuItems = _contextMenuLoader.LoadContextMenus(result);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.AreEqual(contextMenuItems.Count, 2);
|
||||||
|
mockapi.Verify(m => m.GetTranslation("Microsoft_plugin_indexer_copy_path"), Times.Once());
|
||||||
|
mockapi.Verify(m => m.GetTranslation("Microsoft_plugin_indexer_run_as_administrator"), Times.Never());
|
||||||
|
mockapi.Verify(m => m.GetTranslation("Microsoft_plugin_indexer_open_containing_folder"), Times.Never());
|
||||||
|
mockapi.Verify(m => m.GetTranslation("Microsoft_plugin_indexer_open_in_console"), Times.Once());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user