[CmdPal][UI Tests] Add some indexer extension's test cases (#40731)

<!-- Enter a brief description/summary of your PR here. What does it
fix/what does it change/how was it tested (even manually, if necessary)?
-->
## Summary of the Pull Request
1. Add some test cases to cover indexer extension's ability.
2. Add CommandPaletteTestBase class to make us can easily implement test
case.

<!-- Please review the items on the PR checklist before submitting-->
## PR Checklist

- [x] **Closes:** #40732
- [x] **Communication:** I've discussed this with core contributors
already. If the work hasn't been agreed, this work might be rejected
- [x] **Tests:** Added/updated and all pass
- [ ] **Localization:** All end-user-facing strings can be localized
- [ ] **Dev docs:** Added/updated
- [ ] **New binaries:** Added on the required places
- [ ] [JSON for
signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json)
for new binaries
- [ ] [WXS for
installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs)
for new binaries and localization folder
- [ ] [YML for CI
pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml)
for new test projects
- [ ] [YML for signed
pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml)
- [ ] **Documentation updated:** If checked, please file a pull request
on [our docs
repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys)
and link it here: #xxx

<!-- Provide a more detailed description of the PR, other things fixed,
or any additional comments/features here -->
## Detailed Description of the Pull Request / Additional comments

<!-- Describe how you validated the behavior. Add automated tests
wherever possible, but list manual validation steps taken as well -->
## Validation Steps Performed

Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com>
This commit is contained in:
Yu Leng
2025-07-21 18:06:51 +08:00
committed by GitHub
parent 32fdf79085
commit 3f52b2cfc9
3 changed files with 275 additions and 22 deletions

View File

@@ -10,33 +10,12 @@ using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Microsoft.CmdPal.UITests;
[TestClass]
public class BasicTests : UITestBase
public class BasicTests : CommandPaletteTestBase
{
public BasicTests()
: base(PowerToysModule.CommandPalette)
{
}
private void SetSearchBox(string text)
{
Assert.AreEqual(this.Find<TextBox>("Type here to search...").SetText(text, true).Text, text);
}
private void SetFilesExtensionSearchBox(string text)
{
Assert.AreEqual(this.Find<TextBox>("Search for files and folders...").SetText(text, true).Text, text);
}
private void SetCalculatorExtensionSearchBox(string text)
{
Assert.AreEqual(this.Find<TextBox>("Type an equation...").SetText(text, true).Text, text);
}
private void SetTimeAndDaterExtensionSearchBox(string text)
{
Assert.AreEqual(this.Find<TextBox>("Search values or type a custom time stamp...").SetText(text, true).Text, text);
}
[TestMethod]
public void BasicFileSearchTest()
{

View File

@@ -0,0 +1,48 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.PowerToys.UITest;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Microsoft.CmdPal.UITests;
public class CommandPaletteTestBase : UITestBase
{
public CommandPaletteTestBase()
: base(PowerToysModule.CommandPalette)
{
}
protected void SetSearchBox(string text)
{
Assert.AreEqual(this.Find<TextBox>("Type here to search...").SetText(text, true).Text, text);
}
protected void SetFilesExtensionSearchBox(string text)
{
Assert.AreEqual(this.Find<TextBox>("Search for files and folders...").SetText(text, true).Text, text);
}
protected void SetCalculatorExtensionSearchBox(string text)
{
Assert.AreEqual(this.Find<TextBox>("Type an equation...").SetText(text, true).Text, text);
}
protected void SetTimeAndDaterExtensionSearchBox(string text)
{
Assert.AreEqual(this.Find<TextBox>("Search values or type a custom time stamp...").SetText(text, true).Text, text);
}
protected void OpenContextMenu()
{
var contextMenuButton = this.Find<Button>("More");
Assert.IsNotNull(contextMenuButton, "Context menu button not found.");
contextMenuButton.Click();
}
}

View File

@@ -0,0 +1,226 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using Microsoft.PowerToys.UITest;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Microsoft.CmdPal.UITests;
[TestClass]
public class IndexerTests : CommandPaletteTestBase
{
private const string TestFileContent = "This is Indexer UI test sample";
private const string TestFileName = "indexer_test_item.txt";
private const string TestFolderName = "Downloads";
public IndexerTests()
: base()
{
// create a empty file in Downloads folder
// to ensure that the indexer has something to search for
var downloadsPath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Downloads";
var emptyFilePath = System.IO.Path.Combine(downloadsPath, TestFileName);
if (!System.IO.File.Exists(emptyFilePath))
{
using (var fileStream = System.IO.File.Create(emptyFilePath))
{
var content = TestFileContent;
var contentBytes = Encoding.UTF8.GetBytes(content);
fileStream.Write(contentBytes, 0, contentBytes.Length);
}
}
}
public void EnterIndexerExtension()
{
SetSearchBox("files");
var searchFileItem = this.Find<NavigationViewItem>("Search files");
Assert.AreEqual(searchFileItem.Name, "Search files");
searchFileItem.DoubleClick();
}
[TestMethod]
public void BasicIndexerSearchTest()
{
EnterIndexerExtension();
SetFilesExtensionSearchBox("Downloads");
Assert.IsNotNull(this.Find<NavigationViewItem>("Downloads"));
}
[TestMethod]
public void IndexerOpenFileTest()
{
EnterIndexerExtension();
SetFilesExtensionSearchBox(TestFileName);
var searchItem = this.Find<NavigationViewItem>(TestFileName);
Assert.IsNotNull(searchItem);
searchItem.Click();
var openButton = this.Find<Button>("Open");
Assert.IsNotNull(openButton);
openButton.Click();
var notepadWindow = this.Find<Window>($"{TestFileName} - Notepad", global: true);
Assert.IsNotNull(notepadWindow);
}
[TestMethod]
public void IndexerDoubleClickOpenFileTest()
{
EnterIndexerExtension();
SetFilesExtensionSearchBox(TestFileName);
var searchItem = this.Find<NavigationViewItem>(TestFileName);
Assert.IsNotNull(searchItem);
searchItem.DoubleClick();
var notepadWindow = this.Find<Window>($"{TestFileName} - Notepad", global: true);
Assert.IsNotNull(notepadWindow);
}
[TestMethod]
public void IndexerOpenFolderTest()
{
EnterIndexerExtension();
SetFilesExtensionSearchBox(TestFolderName);
var searchItem = this.Find<NavigationViewItem>(TestFolderName);
Assert.IsNotNull(searchItem);
searchItem.Click();
var openButton = this.Find<Button>("Open");
Assert.IsNotNull(openButton);
openButton.Click();
var notepadWindow = this.Find<Window>($"{TestFolderName} - File Explorer", global: true);
Assert.IsNotNull(notepadWindow);
}
[TestMethod]
public void IndexerDoubleClickOpenFolderTest()
{
EnterIndexerExtension();
SetFilesExtensionSearchBox(TestFolderName);
var searchItem = this.Find<NavigationViewItem>(TestFolderName);
Assert.IsNotNull(searchItem);
searchItem.DoubleClick();
var fileExplorer = this.Find<Window>($"{TestFolderName} - File Explorer", global: true);
Assert.IsNotNull(fileExplorer);
}
[TestMethod]
public void IndexerBrowseFolderTest()
{
EnterIndexerExtension();
SetFilesExtensionSearchBox(TestFolderName);
var searchItem = this.Find<NavigationViewItem>(TestFolderName);
Assert.IsNotNull(searchItem);
searchItem.Click();
var openButton = this.Find<Button>("Browse");
Assert.IsNotNull(openButton);
openButton.Click();
var testItem = this.Find<NavigationViewItem>(TestFileName);
Assert.IsNotNull(testItem);
}
[STATestMethod]
[TestMethod]
public void IndexerCopyPathTest()
{
EnterIndexerExtension();
SetFilesExtensionSearchBox(TestFileName);
var searchItem = this.Find<NavigationViewItem>(TestFileName);
Assert.IsNotNull(searchItem);
searchItem.Click();
OpenContextMenu();
var copyPathButton = this.Find<NavigationViewItem>("Copy path");
Assert.IsNotNull(copyPathButton);
copyPathButton.Click();
var clipboardContent = System.Windows.Forms.Clipboard.GetText();
Assert.IsTrue(clipboardContent.Contains(TestFileName), $"Clipboard content does not contain the expected file name. clipboard: {clipboardContent}");
}
[TestMethod]
public void IndexerShowInFolderTest()
{
EnterIndexerExtension();
SetFilesExtensionSearchBox(TestFileName);
var searchItem = this.Find<NavigationViewItem>(TestFileName);
Assert.IsNotNull(searchItem);
searchItem.Click();
OpenContextMenu();
var showInFolderButton = this.Find<NavigationViewItem>("Show in folder");
Assert.IsNotNull(showInFolderButton);
showInFolderButton.Click();
var fileExplorer = this.Find<Window>($"{TestFolderName} - File Explorer", global: true, timeoutMS: 20000);
Assert.IsNotNull(fileExplorer);
}
[TestMethod]
public void IndexerOpenPathInConsoleTest()
{
EnterIndexerExtension();
SetFilesExtensionSearchBox(TestFileName);
var searchItem = this.Find<NavigationViewItem>(TestFileName);
Assert.IsNotNull(searchItem);
searchItem.Click();
OpenContextMenu();
var copyPathButton = this.Find<NavigationViewItem>("Open path in console");
Assert.IsNotNull(copyPathButton);
copyPathButton.Click();
var textItem = this.Find<Window>("C:\\Windows\\system32\\cmd.exe", global: true);
Assert.IsNotNull(textItem, "The console did not open with the expected path.");
}
[TestMethod]
public void IndexerOpenPropertiesTest()
{
EnterIndexerExtension();
SetFilesExtensionSearchBox(TestFileName);
var searchItem = this.Find<NavigationViewItem>(TestFileName);
Assert.IsNotNull(searchItem);
searchItem.Click();
OpenContextMenu();
var copyPathButton = this.Find<NavigationViewItem>("Properties");
Assert.IsNotNull(copyPathButton);
copyPathButton.Click();
var propertiesWindow = this.Find<Window>($"{TestFileName} Properties", global: true);
Assert.IsNotNull(propertiesWindow, "The properties window did not open for the selected file.");
}
}