FxCopAnalyzer fixes for Wox.Test (#7312)

* Added InvarientCulture info (CA1305: Specify IFormatProvider)

* Removed underscore from method names (CA1707: Identifiers should not contain underscores)

* Marked members as static (CA1822: Mark members as static)

* Removed initialization for DummyTestClass::IsFunctionCalled (CA1805: Do not initialize unnecessarily)

* Replaced Count with Any (CA1827: Do not use Count/LongCount when Any can be used)

* Changed WoxTest::DummyTestClass to private (CA1034: Nested types should not be visible)

* Suppressed warnings for uninstantiated internal classes used as TestFixtures (CA1812: Avoid uninstantiated internal classes)

* Enabled FxCopAnalyzer for Wox.Test

* Added suppression message for CA1812 in GlobalSuppressions.cs and removed inline supression messages (CA1812: Avoid uninstantiated internal classes)

* Changed InvariantCulture to Ordinal where appropriate

* Addressing comments: Updated justification for CA1812 in GlobalSuppressions.cs (Avoid uninstantiated internal classes)
This commit is contained in:
Avneet Kaur
2020-10-21 20:13:12 -07:00
committed by GitHub
parent dd2627dbbc
commit cfe9e2328f
7 changed files with 86 additions and 64 deletions

View File

@@ -45,3 +45,6 @@ using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "Microsoft.Templates.Core.Locations.JunctionNativeMethods.ThrowLastWin32Error(System.String)", Scope = "member", Target = "Microsoft.Templates.Core.Locations.JunctionNativeMethods.#InternalGetTarget(Microsoft.Win32.SafeHandles.SafeFileHandle)", Justification = "Only used for local generation")] [assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "Microsoft.Templates.Core.Locations.JunctionNativeMethods.ThrowLastWin32Error(System.String)", Scope = "member", Target = "Microsoft.Templates.Core.Locations.JunctionNativeMethods.#InternalGetTarget(Microsoft.Win32.SafeHandles.SafeFileHandle)", Justification = "Only used for local generation")]
[assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "Microsoft.Templates.Core.Locations.JunctionNativeMethods.ThrowLastWin32Error(System.String)", Scope = "member", Target = "Microsoft.Templates.Core.Locations.JunctionNativeMethods.#OpenReparsePoint(System.String,Microsoft.Templates.Core.Locations.JunctionNativeMethods+EFileAccess)", Justification = "Only used for local generation")] [assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "Microsoft.Templates.Core.Locations.JunctionNativeMethods.ThrowLastWin32Error(System.String)", Scope = "member", Target = "Microsoft.Templates.Core.Locations.JunctionNativeMethods.#OpenReparsePoint(System.String,Microsoft.Templates.Core.Locations.JunctionNativeMethods+EFileAccess)", Justification = "Only used for local generation")]
[assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Documents.InlineCollection.Add(System.String)", Scope = "member", Target = "Microsoft.Templates.UI.Extensions.TextBlockExtensions.#OnSequentialFlowStepChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)", Justification = "No text here")] [assembly: SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Documents.InlineCollection.Add(System.String)", Scope = "member", Target = "Microsoft.Templates.UI.Extensions.TextBlockExtensions.#OnSequentialFlowStepChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)", Justification = "No text here")]
// FxCop warning suppression for uninstantiated TestFixture classes
[assembly: SuppressMessage("Microsoft.Performance", "CA1812: Avoid uninstantiated internal classes", Scope = "module", Justification = "CA1812 will be thrown for every file in the test project. This is mentioned here: dotnet/roslyn-analyzers#1830")]

View File

@@ -5,6 +5,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Globalization;
using System.Linq; using System.Linq;
using NUnit.Framework; using NUnit.Framework;
using Wox.Infrastructure; using Wox.Infrastructure;
@@ -23,7 +24,7 @@ namespace Wox.Test
private const string OneOneOneOne = "1111"; private const string OneOneOneOne = "1111";
private const string MicrosoftSqlServerManagementStudio = "Microsoft SQL Server Management Studio"; private const string MicrosoftSqlServerManagementStudio = "Microsoft SQL Server Management Studio";
public List<string> GetSearchStrings() public static List<string> GetSearchStrings()
=> new List<string> => new List<string>
{ {
Chrome, Chrome,
@@ -36,7 +37,7 @@ namespace Wox.Test
OneOneOneOne, OneOneOneOne,
}; };
public List<int> GetPrecisionScores() public static List<int> GetPrecisionScores()
{ {
var listToReturn = new List<int>(); var listToReturn = new List<int>();
@@ -117,7 +118,8 @@ namespace Wox.Test
Debug.WriteLine("SEARCHTERM: " + searchTerm + ", GreaterThanSearchPrecisionScore: " + precisionScore); Debug.WriteLine("SEARCHTERM: " + searchTerm + ", GreaterThanSearchPrecisionScore: " + precisionScore);
foreach (var item in filteredResult) foreach (var item in filteredResult)
{ {
Debug.WriteLine("SCORE: " + item.Score.ToString() + ", FoundString: " + item.Title); // Using InvariantCulture since this is used for testing
Debug.WriteLine("SCORE: " + item.Score.ToString(CultureInfo.InvariantCulture) + ", FoundString: " + item.Title);
} }
Debug.WriteLine("###############################################"); Debug.WriteLine("###############################################");
@@ -128,7 +130,7 @@ namespace Wox.Test
} }
[TestCase("vim", "Vim", "ignoreDescription", "ignore.exe", "Vim Diff", "ignoreDescription", "ignore.exe")] [TestCase("vim", "Vim", "ignoreDescription", "ignore.exe", "Vim Diff", "ignoreDescription", "ignore.exe")]
public void WhenMultipleResults_ExactMatchingResult_ShouldHaveGreatestScore(string queryString, string firstName, string firstDescription, string firstExecutableName, string secondName, string secondDescription, string secondExecutableName) public void WhenMultipleResultsExactMatchingResultShouldHaveGreatestScore(string queryString, string firstName, string firstDescription, string firstExecutableName, string secondName, string secondDescription, string secondExecutableName)
{ {
// Act // Act
var matcher = new StringMatcher(); var matcher = new StringMatcher();
@@ -228,7 +230,7 @@ namespace Wox.Test
[TestCase("Windows Terminal", "Windows_Terminal", "term")] [TestCase("Windows Terminal", "Windows_Terminal", "term")]
[TestCase("Windows Terminal", "WindowsTerminal", "term")] [TestCase("Windows Terminal", "WindowsTerminal", "term")]
public void FuzzyMatchingScore_ShouldBeHigher_WhenPreceedingCharacterIsSpace(string firstCompareStr, string secondCompareStr, string query) public void FuzzyMatchingScoreShouldBeHigherWhenPreceedingCharacterIsSpace(string firstCompareStr, string secondCompareStr, string query)
{ {
// Arrange // Arrange
var matcher = new StringMatcher(); var matcher = new StringMatcher();

View File

@@ -24,7 +24,7 @@ namespace Wox.Test
[TestCase(null, "dummyQueryText", "dummyTitle", "dummyQueryText")] [TestCase(null, "dummyQueryText", "dummyTitle", "dummyQueryText")]
[TestCase(null, null, "dummyTitle", "dummyTitle")] [TestCase(null, null, "dummyTitle", "dummyTitle")]
[TestCase(null, "", "dummyTitle", "dummyTitle")] [TestCase(null, "", "dummyTitle", "dummyTitle")]
public void QueryForPlugin_SetsActionKeyword_WhenQueryTextDisplayIsEmpty(string actionKeyword, string queryTextDisplay, string title, string expectedResult) public void QueryForPluginSetsActionKeywordWhenQueryTextDisplayIsEmpty(string actionKeyword, string queryTextDisplay, string title, string expectedResult)
{ {
// Arrange // Arrange
var query = new Query var query = new Query

View File

@@ -18,14 +18,14 @@ namespace Wox.Test.Plugins
[TestFixture] [TestFixture]
public class WindowsIndexerTest public class WindowsIndexerTest
{ {
private WindowsSearchAPI GetWindowsSearchAPI() private static WindowsSearchAPI GetWindowsSearchAPI()
{ {
var mock = new Mock<ISearch>(); var mock = new Mock<ISearch>();
mock.Setup(x => x.Query("dummy-connection-string", "dummy-query")).Returns(new List<OleDBResult>()); mock.Setup(x => x.Query("dummy-connection-string", "dummy-query")).Returns(new List<OleDBResult>());
return new WindowsSearchAPI(mock.Object); return new WindowsSearchAPI(mock.Object);
} }
private ISearchManager GetMockSearchManager() private static ISearchManager GetMockSearchManager()
{ {
var sqlQuery = "SELECT TOP 30 \"System.ItemUrl\", \"System.FileName\", \"System.FileAttributes\" FROM \"SystemIndex\" WHERE CONTAINS(System.FileName,'\"FilePath\"',1033) AND scope='file:' ORDER BY System.DateModified DESC"; var sqlQuery = "SELECT TOP 30 \"System.ItemUrl\", \"System.FileName\", \"System.FileAttributes\" FROM \"SystemIndex\" WHERE CONTAINS(System.FileName,'\"FilePath\"',1033) AND scope='file:' ORDER BY System.DateModified DESC";
var mockSearchManager = new Mock<ISearchManager>(); var mockSearchManager = new Mock<ISearchManager>();
@@ -40,7 +40,7 @@ namespace Wox.Test.Plugins
} }
[Test] [Test]
public void InitQueryHelper_ShouldInitialize_WhenFunctionIsCalled() public void InitQueryHelperShouldInitializeWhenFunctionIsCalled()
{ {
// Arrange // Arrange
int maxCount = 10; int maxCount = 10;
@@ -57,7 +57,7 @@ namespace Wox.Test.Plugins
} }
[Test] [Test]
public void ModifyQueryHelper_ShouldSetQueryHelper_WhenPatternIsAsterisk() public void ModifyQueryHelperShouldSetQueryHelperWhenPatternIsAsterisk()
{ {
// Arrange // Arrange
ISearchQueryHelper queryHelper; ISearchQueryHelper queryHelper;
@@ -70,12 +70,13 @@ namespace Wox.Test.Plugins
WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern); WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern);
// Assert // Assert
Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("LIKE")); // Using Ordinal since this is used internally
Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("Contains")); Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("LIKE", StringComparison.Ordinal));
Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("Contains", StringComparison.Ordinal));
} }
[Test] [Test]
public void ModifyQueryHelper_ShouldSetQueryHelper_WhenPatternContainsAsterisk() public void ModifyQueryHelperShouldSetQueryHelperWhenPatternContainsAsterisk()
{ {
// Arrange // Arrange
ISearchQueryHelper queryHelper; ISearchQueryHelper queryHelper;
@@ -88,12 +89,13 @@ namespace Wox.Test.Plugins
WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern); WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern);
// Assert // Assert
Assert.IsTrue(queryHelper.QueryWhereRestrictions.Contains("LIKE")); // Using Ordinal since this is used internally
Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("Contains")); Assert.IsTrue(queryHelper.QueryWhereRestrictions.Contains("LIKE", StringComparison.Ordinal));
Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("Contains", StringComparison.Ordinal));
} }
[Test] [Test]
public void ModifyQueryHelper_ShouldSetQueryHelper_WhenPatternContainsPercent() public void ModifyQueryHelperShouldSetQueryHelperWhenPatternContainsPercent()
{ {
// Arrange // Arrange
ISearchQueryHelper queryHelper; ISearchQueryHelper queryHelper;
@@ -106,12 +108,13 @@ namespace Wox.Test.Plugins
WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern); WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern);
// Assert // Assert
Assert.IsTrue(queryHelper.QueryWhereRestrictions.Contains("LIKE")); // Using Ordinal since this is used internally
Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("Contains")); Assert.IsTrue(queryHelper.QueryWhereRestrictions.Contains("LIKE", StringComparison.Ordinal));
Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("Contains", StringComparison.Ordinal));
} }
[Test] [Test]
public void ModifyQueryHelper_ShouldSetQueryHelper_WhenPatternContainsUnderScore() public void ModifyQueryHelperShouldSetQueryHelperWhenPatternContainsUnderScore()
{ {
// Arrange // Arrange
ISearchQueryHelper queryHelper; ISearchQueryHelper queryHelper;
@@ -124,12 +127,13 @@ namespace Wox.Test.Plugins
WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern); WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern);
// Assert // Assert
Assert.IsTrue(queryHelper.QueryWhereRestrictions.Contains("LIKE")); // Using Ordinal since this is used internally
Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("Contains")); Assert.IsTrue(queryHelper.QueryWhereRestrictions.Contains("LIKE", StringComparison.Ordinal));
Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("Contains", StringComparison.Ordinal));
} }
[Test] [Test]
public void ModifyQueryHelper_ShouldSetQueryHelper_WhenPatternContainsQuestionMark() public void ModifyQueryHelperShouldSetQueryHelperWhenPatternContainsQuestionMark()
{ {
// Arrange // Arrange
ISearchQueryHelper queryHelper; ISearchQueryHelper queryHelper;
@@ -142,12 +146,13 @@ namespace Wox.Test.Plugins
WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern); WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern);
// Assert // Assert
Assert.IsTrue(queryHelper.QueryWhereRestrictions.Contains("LIKE")); // Using Ordinal since this is used internally
Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("Contains")); Assert.IsTrue(queryHelper.QueryWhereRestrictions.Contains("LIKE", StringComparison.Ordinal));
Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("Contains", StringComparison.Ordinal));
} }
[Test] [Test]
public void ModifyQueryHelper_ShouldSetQueryHelper_WhenPatternDoesNotContainSplSymbols() public void ModifyQueryHelperShouldSetQueryHelperWhenPatternDoesNotContainSplSymbols()
{ {
// Arrange // Arrange
ISearchQueryHelper queryHelper; ISearchQueryHelper queryHelper;
@@ -160,12 +165,13 @@ namespace Wox.Test.Plugins
WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern); WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern);
// Assert // Assert
Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("LIKE")); // Using Ordinal since this is used internally
Assert.IsTrue(queryHelper.QueryWhereRestrictions.Contains("Contains")); Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("LIKE", StringComparison.Ordinal));
Assert.IsTrue(queryHelper.QueryWhereRestrictions.Contains("Contains", StringComparison.Ordinal));
} }
[Test] [Test]
public void WindowsSearchAPI_ShouldReturnResults_WhenSearchWasExecuted() public void WindowsSearchAPIShouldReturnResultsWhenSearchWasExecuted()
{ {
// Arrange // Arrange
OleDBResult unHiddenFile = new OleDBResult(new List<object>() { "C:/test/path/file1.txt", "file1.txt" }); OleDBResult unHiddenFile = new OleDBResult(new List<object>() { "C:/test/path/file1.txt", "file1.txt" });
@@ -186,7 +192,7 @@ namespace Wox.Test.Plugins
} }
[Test] [Test]
public void WindowsSearchAPI_ShouldNotReturnResultsWithNullValue_WhenDbResultHasANullColumn() public void WindowsSearchAPIShouldNotReturnResultsWithNullValueWhenDbResultHasANullColumn()
{ {
// Arrange // Arrange
OleDBResult unHiddenFile = new OleDBResult(new List<object>() { "C:/test/path/file1.txt", DBNull.Value }); OleDBResult unHiddenFile = new OleDBResult(new List<object>() { "C:/test/path/file1.txt", DBNull.Value });
@@ -207,7 +213,7 @@ namespace Wox.Test.Plugins
} }
[Test] [Test]
public void WindowsSearchAPI_ShouldRequestNormalRequest_WhenDisplayHiddenFilesIsTrue() public void WindowsSearchAPIShouldRequestNormalRequestWhenDisplayHiddenFilesIsTrue()
{ {
ISearchQueryHelper queryHelper; ISearchQueryHelper queryHelper;
string pattern = "notepad"; string pattern = "notepad";
@@ -220,11 +226,12 @@ namespace Wox.Test.Plugins
WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern); WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern);
// Assert // Assert
Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("AND System.FileAttributes <> SOME BITWISE 2")); // Using Ordinal since this is used internally
Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("AND System.FileAttributes <> SOME BITWISE 2", StringComparison.Ordinal));
} }
[Test] [Test]
public void WindowsSearchAPI_ShouldRequestFilteredRequest_WhenDisplayHiddenFilesIsFalse() public void WindowsSearchAPIShouldRequestFilteredRequestWhenDisplayHiddenFilesIsFalse()
{ {
ISearchQueryHelper queryHelper; ISearchQueryHelper queryHelper;
string pattern = "notepad"; string pattern = "notepad";
@@ -237,11 +244,12 @@ namespace Wox.Test.Plugins
WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern); WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern);
// Assert // Assert
Assert.IsTrue(queryHelper.QueryWhereRestrictions.Contains("AND System.FileAttributes <> SOME BITWISE 2")); // Using Ordinal since this is used internally
Assert.IsTrue(queryHelper.QueryWhereRestrictions.Contains("AND System.FileAttributes <> SOME BITWISE 2", StringComparison.Ordinal));
} }
[Test] [Test]
public void WindowsSearchAPI_ShouldRequestNormalRequest_WhenDisplayHiddenFilesIsTrue_AfterRuntimeSwap() public void WindowsSearchAPIShouldRequestNormalRequestWhenDisplayHiddenFilesIsTrueAfterRuntimeSwap()
{ {
ISearchQueryHelper queryHelper; ISearchQueryHelper queryHelper;
string pattern = "notepad"; string pattern = "notepad";
@@ -257,14 +265,15 @@ namespace Wox.Test.Plugins
WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern); WindowsSearchAPI.ModifyQueryHelper(ref queryHelper, pattern);
// Assert // Assert
Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("AND System.FileAttributes <> SOME BITWISE 2")); // Using Ordinal since this is used internally
Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("AND System.FileAttributes <> SOME BITWISE 2", StringComparison.Ordinal));
} }
[TestCase("item.exe")] [TestCase("item.exe")]
[TestCase("item.bat")] [TestCase("item.bat")]
[TestCase("item.appref-ms")] [TestCase("item.appref-ms")]
[TestCase("item.lnk")] [TestCase("item.lnk")]
public void LoadContextMenus_MustLoadAllItems_WhenFileIsAnApp(string path) public void LoadContextMenusMustLoadAllItemsWhenFileIsAnApp(string path)
{ {
// Arrange // Arrange
var mockapi = new Mock<IPublicAPI>(); var mockapi = new Mock<IPublicAPI>();
@@ -292,7 +301,7 @@ namespace Wox.Test.Plugins
[TestCase("item.xls")] [TestCase("item.xls")]
[TestCase("item.ppt")] [TestCase("item.ppt")]
[TestCase("C:/DummyFile.cs")] [TestCase("C:/DummyFile.cs")]
public void LoadContextMenus_MustNotLoadRunAsAdmin_WhenFileIsAnNotApp(string path) public void LoadContextMenusMustNotLoadRunAsAdminWhenFileIsAnNotApp(string path)
{ {
// Arrange // Arrange
var mockapi = new Mock<IPublicAPI>(); var mockapi = new Mock<IPublicAPI>();
@@ -317,7 +326,7 @@ namespace Wox.Test.Plugins
[TestCase("C:/DummyFolder")] [TestCase("C:/DummyFolder")]
[TestCase("TestFolder")] [TestCase("TestFolder")]
public void LoadContextMenus_MustNotLoadRunAsAdminAndOpenContainingFolder_ForFolder(string path) public void LoadContextMenusMustNotLoadRunAsAdminAndOpenContainingFolderForFolder(string path)
{ {
// Arrange // Arrange
var mockapi = new Mock<IPublicAPI>(); var mockapi = new Mock<IPublicAPI>();
@@ -343,7 +352,7 @@ namespace Wox.Test.Plugins
[TestCase(0, true, ExpectedResult = false)] [TestCase(0, true, ExpectedResult = false)]
[TestCase(1, false, ExpectedResult = false)] [TestCase(1, false, ExpectedResult = false)]
[TestCase(1, true, ExpectedResult = false)] [TestCase(1, true, ExpectedResult = false)]
public bool DriveDetection_MustDisplayWarning_WhenEnhancedModeIsOffAndWhenWarningIsNotDisabled(int enhancedModeStatus, bool disableWarningCheckBoxStatus) public bool DriveDetectionMustDisplayWarningWhenEnhancedModeIsOffAndWhenWarningIsNotDisabled(int enhancedModeStatus, bool disableWarningCheckBoxStatus)
{ {
// Arrange // Arrange
var mockRegistry = new Mock<IRegistryWrapper>(); var mockRegistry = new Mock<IRegistryWrapper>();
@@ -357,7 +366,7 @@ namespace Wox.Test.Plugins
} }
[Test] [Test]
public void SimplifyQuery_ShouldRemoveLikeQuery_WhenSQLQueryUsesLIKESyntax() public void SimplifyQueryShouldRemoveLikeQueryWhenSQLQueryUsesLIKESyntax()
{ {
// Arrange // Arrange
string sqlQuery = "SELECT TOP 30 \"System.ItemUrl\", \"System.FileName\", \"System.FileAttributes\" FROM \"SystemIndex\" WHERE (System.FileName LIKE 'abcd.%' OR CONTAINS(System.FileName,'\"abcd.*\"',1033)) AND scope='file:' ORDER BY System.DateModified DESC"; string sqlQuery = "SELECT TOP 30 \"System.ItemUrl\", \"System.FileName\", \"System.FileAttributes\" FROM \"SystemIndex\" WHERE (System.FileName LIKE 'abcd.%' OR CONTAINS(System.FileName,'\"abcd.*\"',1033)) AND scope='file:' ORDER BY System.DateModified DESC";
@@ -372,7 +381,7 @@ namespace Wox.Test.Plugins
} }
[Test] [Test]
public void SimplifyQuery_ShouldReturnArgument_WhenSQLQueryDoesNotUseLIKESyntax() public void SimplifyQueryShouldReturnArgumentWhenSQLQueryDoesNotUseLIKESyntax()
{ {
// Arrange // Arrange
string sqlQuery = "SELECT TOP 30 \"System.ItemUrl\", \"System.FileName\", \"System.FileAttributes\" FROM \"SystemIndex\" WHERE CONTAINS(System.FileName,'\"abcd*\"',1033) AND scope='file:' ORDER BY System.DateModified DESC"; string sqlQuery = "SELECT TOP 30 \"System.ItemUrl\", \"System.FileName\", \"System.FileAttributes\" FROM \"SystemIndex\" WHERE CONTAINS(System.FileName,'\"abcd*\"',1033) AND scope='file:' ORDER BY System.DateModified DESC";
@@ -385,7 +394,7 @@ namespace Wox.Test.Plugins
} }
[Test] [Test]
public void SimplifyQuery_ShouldRemoveAllOccurrencesOfLikeQuery_WhenSQLQueryUsesLIKESyntaxMultipleTimes() public void SimplifyQueryShouldRemoveAllOccurrencesOfLikeQueryWhenSQLQueryUsesLIKESyntaxMultipleTimes()
{ {
// Arrange // Arrange
string sqlQuery = "SELECT TOP 30 \"System.ItemUrl\", \"System.FileName\", \"System.FileAttributes\", \"System.FileExtension\" FROM \"SystemIndex\" WHERE (System.FileName LIKE 'ab.%' OR CONTAINS(System.FileName,'\"ab.*\"',1033)) AND (System.FileExtension LIKE '.cd%' OR CONTAINS(System.FileName,'\".cd*\"',1033)) AND scope='file:' ORDER BY System.DateModified DESC"; string sqlQuery = "SELECT TOP 30 \"System.ItemUrl\", \"System.FileName\", \"System.FileAttributes\", \"System.FileExtension\" FROM \"SystemIndex\" WHERE (System.FileName LIKE 'ab.%' OR CONTAINS(System.FileName,'\"ab.*\"',1033)) AND (System.FileExtension LIKE '.cd%' OR CONTAINS(System.FileName,'\".cd*\"',1033)) AND scope='file:' ORDER BY System.DateModified DESC";
@@ -400,7 +409,7 @@ namespace Wox.Test.Plugins
} }
[Test] [Test]
public void SimplifyQuery_ShouldRemoveLikeQuery_WhenSQLQueryUsesLIKESyntaxAndContainsEscapedSingleQuotationMarks() public void SimplifyQueryShouldRemoveLikeQueryWhenSQLQueryUsesLIKESyntaxAndContainsEscapedSingleQuotationMarks()
{ {
// Arrange // Arrange
string sqlQuery = "SELECT TOP 30 \"System.ItemUrl\", \"System.FileName\", \"System.FileAttributes\" FROM \"SystemIndex\" WHERE (System.FileName LIKE '''ab.cd''%' OR CONTAINS(System.FileName,'\"'ab.cd'*\"',1033)) AND scope='file:' ORDER BY System.DateModified DESC"; string sqlQuery = "SELECT TOP 30 \"System.ItemUrl\", \"System.FileName\", \"System.FileAttributes\" FROM \"SystemIndex\" WHERE (System.FileName LIKE '''ab.cd''%' OR CONTAINS(System.FileName,'\"'ab.cd'*\"',1033)) AND scope='file:' ORDER BY System.DateModified DESC";
@@ -415,7 +424,7 @@ namespace Wox.Test.Plugins
} }
[Test] [Test]
public void WindowsSearchAPI_ShouldReturnEmptyResults_WhenIsFullQueryIsTrueAndTheQueryDoesNotRequireLIKESyntax() public void WindowsSearchAPIShouldReturnEmptyResultsWhenIsFullQueryIsTrueAndTheQueryDoesNotRequireLIKESyntax()
{ {
// Arrange // Arrange
OleDBResult file1 = new OleDBResult(new List<object>() { "C:/test/path/file1.txt", DBNull.Value }); OleDBResult file1 = new OleDBResult(new List<object>() { "C:/test/path/file1.txt", DBNull.Value });
@@ -431,7 +440,7 @@ namespace Wox.Test.Plugins
var windowsSearchAPIResults = api.Search("file", searchManager, true); var windowsSearchAPIResults = api.Search("file", searchManager, true);
// Assert // Assert
Assert.IsTrue(windowsSearchAPIResults.Count() == 0); Assert.IsTrue(!windowsSearchAPIResults.Any());
} }
} }
} }

View File

@@ -2,6 +2,7 @@
// The Microsoft Corporation licenses this file to you under the MIT license. // The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information. // See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic; using System.Collections.Generic;
using NUnit.Framework; using NUnit.Framework;
using Wox.Core.Plugin; using Wox.Core.Plugin;
@@ -11,15 +12,16 @@ namespace Wox.Test
{ {
public class QueryBuilderTest public class QueryBuilderTest
{ {
private bool AreEqual(Query firstQuery, Query secondQuery) private static bool AreEqual(Query firstQuery, Query secondQuery)
{ {
return firstQuery.ActionKeyword.Equals(secondQuery.ActionKeyword) // Using Ordinal since this is used internally
&& firstQuery.Search.Equals(secondQuery.Search) return firstQuery.ActionKeyword.Equals(secondQuery.ActionKeyword, StringComparison.Ordinal)
&& firstQuery.RawQuery.Equals(secondQuery.RawQuery); && firstQuery.Search.Equals(secondQuery.Search, StringComparison.Ordinal)
&& firstQuery.RawQuery.Equals(secondQuery.RawQuery, StringComparison.Ordinal);
} }
[Test] [Test]
public void QueryBuilder_ShouldRemoveExtraSpaces_ForNonGlobalPlugin() public void QueryBuilderShouldRemoveExtraSpacesForNonGlobalPlugin()
{ {
// Arrange // Arrange
var nonGlobalPlugins = new Dictionary<string, PluginPair> var nonGlobalPlugins = new Dictionary<string, PluginPair>
@@ -36,7 +38,7 @@ namespace Wox.Test
} }
[Test] [Test]
public void QueryBuilder_ShouldRemoveExtraSpaces_ForDisabledNonGlobalPlugin() public void QueryBuilderShouldRemoveExtraSpacesForDisabledNonGlobalPlugin()
{ {
// Arrange // Arrange
var nonGlobalPlugins = new Dictionary<string, PluginPair> var nonGlobalPlugins = new Dictionary<string, PluginPair>
@@ -53,7 +55,7 @@ namespace Wox.Test
} }
[Test] [Test]
public void QueryBuilder_ShouldRemoveExtraSpaces_ForGlobalPlugin() public void QueryBuilderShouldRemoveExtraSpacesForGlobalPlugin()
{ {
// Arrange // Arrange
string searchQuery = "file.txt file2 file3"; string searchQuery = "file.txt file2 file3";
@@ -66,7 +68,7 @@ namespace Wox.Test
} }
[Test] [Test]
public void QueryBuilder_ShouldGenerateSameQuery_IfEitherActionKeywordOrActionKeywordsListIsSet() public void QueryBuilderShouldGenerateSameQueryIfEitherActionKeywordOrActionKeywordsListIsSet()
{ {
// Arrange // Arrange
string searchQuery = "> query"; string searchQuery = "> query";
@@ -98,7 +100,7 @@ namespace Wox.Test
} }
[Test] [Test]
public void QueryBuilder_ShouldGenerateCorrectQueries_ForPluginsWithMultipleActionKeywords() public void QueryBuilderShouldGenerateCorrectQueriesForPluginsWithMultipleActionKeywords()
{ {
// Arrange // Arrange
var plugin = new PluginPair { Metadata = new PluginMetadata { ActionKeywords = new List<string> { "a", "b" } } }; var plugin = new PluginPair { Metadata = new PluginMetadata { ActionKeywords = new List<string> { "a", "b" } } };
@@ -124,7 +126,7 @@ namespace Wox.Test
} }
[Test] [Test]
public void QueryBuild_ShouldGenerateSameSearchQuery_WithOrWithoutSpaceAfterActionKeyword() public void QueryBuildShouldGenerateSameSearchQueryWithOrWithoutSpaceAfterActionKeyword()
{ {
// Arrange // Arrange
var plugin = new PluginPair { Metadata = new PluginMetadata { ActionKeywords = new List<string> { "a" } } }; var plugin = new PluginPair { Metadata = new PluginMetadata { ActionKeywords = new List<string> { "a" } } };
@@ -144,12 +146,13 @@ namespace Wox.Test
var secondQuery = secondPluginQueryPairs.GetValueOrDefault(plugin); var secondQuery = secondPluginQueryPairs.GetValueOrDefault(plugin);
// Assert // Assert
Assert.IsTrue(firstQuery.Search.Equals(secondQuery.Search)); // Using Ordinal since this is used internally
Assert.IsTrue(firstQuery.ActionKeyword.Equals(secondQuery.ActionKeyword)); Assert.IsTrue(firstQuery.Search.Equals(secondQuery.Search, StringComparison.Ordinal));
Assert.IsTrue(firstQuery.ActionKeyword.Equals(secondQuery.ActionKeyword, StringComparison.Ordinal));
} }
[Test] [Test]
public void QueryBuild_ShouldGenerateCorrectQuery_ForPluginsWhoseActionKeywordsHaveSamePrefix() public void QueryBuildShouldGenerateCorrectQueryForPluginsWhoseActionKeywordsHaveSamePrefix()
{ {
// Arrange // Arrange
string searchQuery = "abcdefgh"; string searchQuery = "abcdefgh";
@@ -174,7 +177,7 @@ namespace Wox.Test
} }
[Test] [Test]
public void QueryBuilder_ShouldSetTermsCorrently_WhenCalled() public void QueryBuilderShouldSetTermsCorrentlyWhenCalled()
{ {
// Arrange // Arrange
string searchQuery = "abcd efgh"; string searchQuery = "abcd efgh";
@@ -194,8 +197,9 @@ namespace Wox.Test
var secondQuery = pluginQueryPairs.GetValueOrDefault(secondPlugin); var secondQuery = pluginQueryPairs.GetValueOrDefault(secondPlugin);
// Assert // Assert
Assert.IsTrue(firstQuery.Terms[0].Equals("cd") && firstQuery.Terms[1].Equals("efgh") && firstQuery.Terms.Length == 2); // Using Ordinal since this is used internally
Assert.IsTrue(secondQuery.Terms[0].Equals("efgh") && secondQuery.Terms.Length == 1); Assert.IsTrue(firstQuery.Terms[0].Equals("cd", StringComparison.Ordinal) && firstQuery.Terms[1].Equals("efgh", StringComparison.Ordinal) && firstQuery.Terms.Length == 2);
Assert.IsTrue(secondQuery.Terms[0].Equals("efgh", StringComparison.Ordinal) && secondQuery.Terms.Length == 1);
} }
} }
} }

View File

@@ -57,6 +57,10 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="3.3.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Moq" Version="4.14.5" /> <PackageReference Include="Moq" Version="4.14.5" />
<PackageReference Include="nunit" Version="3.12.0" /> <PackageReference Include="nunit" Version="3.12.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.17.0"> <PackageReference Include="NUnit3TestAdapter" Version="3.17.0">

View File

@@ -14,9 +14,9 @@ namespace Wox.Test
public class WoxTest public class WoxTest
{ {
// A Dummy class to test that OnPropertyChanged() is called while we set the variable // A Dummy class to test that OnPropertyChanged() is called while we set the variable
public class DummyTestClass : BaseModel private class DummyTestClass : BaseModel
{ {
public bool IsFunctionCalled { get; set; } = false; public bool IsFunctionCalled { get; set; }
private ICommand _item; private ICommand _item;
@@ -45,7 +45,7 @@ namespace Wox.Test
} }
[Test] [Test]
public void AnyVariable_MustCallOnPropertyChanged_WhenSet() public void AnyVariableMustCallOnPropertyChangedWhenSet()
{ {
// Arrange // Arrange
DummyTestClass testClass = new DummyTestClass(); DummyTestClass testClass = new DummyTestClass();