From 78b797e43b8f011c932139f634a7d48b890bd454 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Tue, 19 May 2020 22:36:56 +1000 Subject: [PATCH] Add tests for checking string is location path --- Flow.Launcher.Test/Plugins/ExplorerTest.cs | 24 +++++++++- .../Search/SearchManager.cs | 46 ++++++++++++++++++- 2 files changed, 66 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher.Test/Plugins/ExplorerTest.cs b/Flow.Launcher.Test/Plugins/ExplorerTest.cs index 780feae3f..38090572e 100644 --- a/Flow.Launcher.Test/Plugins/ExplorerTest.cs +++ b/Flow.Launcher.Test/Plugins/ExplorerTest.cs @@ -104,7 +104,7 @@ namespace Flow.Launcher.Test.Plugins public void GivenWindowsIndexSearch_WhenReturnedZeroResultsAndIsNotIndexed_ThenSearchMethodShouldContinueDirectoryInfoClassSearch() { // Given - var searchManager = new SearchManager(); + var searchManager = new SearchManager(new Settings(), new PluginInitContext()); // When var results = searchManager.TopLevelFolderSearch( @@ -123,7 +123,7 @@ namespace Flow.Launcher.Test.Plugins public void GivenWindowsIndexSearch_WhenReturnedZeroResultsAndIsIndexed_ThenSearchMethodShouldNotContinueDirectoryInfoClassSearch() { // Given - var searchManager = new SearchManager(); + var searchManager = new SearchManager(new Settings(), new PluginInitContext()); // When var results = searchManager.TopLevelFolderSearch( @@ -139,5 +139,25 @@ namespace Flow.Launcher.Test.Plugins } public void GivenWindowsIndexSearch_WhenSearchPatternHotKeyIsSearchAll_ThenQueryWhereRestrictionsShouldUseScopeString() { } + + [TestCase(@"c:\\", false)] + [TestCase(@"i:\", true)] + [TestCase(@"\c:\", false)] + [TestCase(@"cc:\", false)] + [TestCase(@"\\\SomeNetworkLocation\", false)] + [TestCase("RandomString", false)] + public void WhenGivenQuerySearchString_ThenShouldIndicateIfItIsLocationString(string querySearchString, bool expectedResult) + { + // When, Given + var searchManager = new SearchManager(new Settings(), new PluginInitContext()); + + var result = searchManager.IsLocationPathString(querySearchString); + + //Then + Assert.IsTrue(result == expectedResult, + $"Expected query search string check result is: {expectedResult} {Environment.NewLine} " + + $"Actual check result is {result} {Environment.NewLine}"); + + } } } diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs index c2a250ae7..1dd834428 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs @@ -1,11 +1,53 @@ -using System; +using Flow.Launcher.Plugin.Explorer.Search.WindowsIndex; +using System; using System.Collections.Generic; -using System.Text; namespace Flow.Launcher.Plugin.Explorer.Search { public class SearchManager { + private Settings _settings; + private PluginInitContext _context; + + public SearchManager(Settings settings, PluginInitContext context) + { + _settings = settings; + _context = context; + } + + /// + /// This checks whether a given string is a directory path or network location string. + /// It does not check if location actually exists. + /// + public bool IsLocationPathString(string querySearchString) + { + if (string.IsNullOrEmpty(querySearchString)) + return false; + + // // shared folder location, and not \\\location\ + if (querySearchString.Length >= 3 + && querySearchString.StartsWith(@"\\") + && char.IsLetter(querySearchString[2])) + return true; + + // c:\ + if (querySearchString.Length == 3 + && char.IsLetter(querySearchString[0]) + && querySearchString[1] == ':' + && querySearchString[2] == '\\') + return true; + + // c:\\ + if (querySearchString.Length >= 4 + && char.IsLetter(querySearchString[0]) + && querySearchString[1] == ':' + && querySearchString[2] == '\\' + && char.IsLetter(querySearchString[3])) + return true; + + return false; + } + public List TopLevelFolderSearch( Func> windowsIndexSearch, Func> directoryInfoClassSearch,