Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
1eabc39
Fix multi-turn tool calling in AppleIntelligenceChatClient
mattleibow Feb 19, 2026
430cc98
Add device tests for multi-turn tool calling
mattleibow Feb 19, 2026
9cfbc4b
Reset stream chunker across tool call boundaries
mattleibow Feb 19, 2026
f4607ef
Add chat overlay with 8 AI tools to sample app
mattleibow Feb 19, 2026
67a7c0f
Add AI project to device tests skill and parameterize sandbox script
mattleibow Feb 19, 2026
d5e8b7e
Add Reset() unit tests for PlainText and Json stream chunkers
mattleibow Feb 19, 2026
a864a7a
Add new chat button and responsive panel sizing
mattleibow Feb 19, 2026
f56c0ad
Right-align chat panel, add thinking indicator, fix post-tool bubble
mattleibow Feb 19, 2026
83c5363
Simplify chat panel layout, add markdown rendering
mattleibow Feb 19, 2026
ba8ba9f
Use Markdig AST for markdown rendering in chat bubbles
mattleibow Feb 19, 2026
46d0b20
Fix weather tool, responsive panel sizing, remove date tool
mattleibow Feb 19, 2026
850249c
Fix chat history to preserve tool call context
mattleibow Feb 19, 2026
9065b39
Add device tests for streaming multi-turn tool calling history
mattleibow Feb 19, 2026
3b43d6f
Fix message ordering: add to history inline as content arrives
mattleibow Feb 19, 2026
dabdd35
Fix null sentinel, review findings, and add debug logging
mattleibow Feb 19, 2026
69f2ff5
Revert BuildAndRunSandbox.ps1 to main — sandbox-specific changes
mattleibow Feb 19, 2026
2462e25
Remove debug logging/dispatcher, fix transcript ordering, add tests
mattleibow Feb 19, 2026
7ed5f73
Remove 'null' string guards — test proves they were unnecessary
mattleibow Feb 19, 2026
27c260c
Fix thinking bubble removal and add ViewModel simulation tests
mattleibow Feb 20, 2026
a8077fb
Try fix AI's mistakes
mattleibow Feb 24, 2026
d506dc1
Protect streaming callbacks from unhandled exceptions
mattleibow Feb 24, 2026
38c1974
Materialize IEnumerable<ChatMessage> to prevent double enumeration
mattleibow Feb 24, 2026
59c0336
Flush chunker before reset on tool call
mattleibow Feb 24, 2026
f0a6a76
Extract handler classes for testability
mattleibow Feb 24, 2026
6d934ee
Split ProcessUpdate into per-type methods and move to unit tests
mattleibow Feb 24, 2026
a329f5f
Move ChatBubble from Models to ViewModels
mattleibow Feb 24, 2026
edb7458
Move NonStreamingResponseHandler to Platform/ with unit tests
mattleibow Feb 24, 2026
b0661e3
Modernize ChatBubbleViewModel and simplify prompt selection
mattleibow Feb 24, 2026
24ecb81
Extract per-role transcript conversion functions in Swift
mattleibow Feb 24, 2026
05e6684
Inject StreamChunkerBase into StreamingResponseHandler
mattleibow Feb 24, 2026
df3b2ca
Apply 3-model review fixes: cancel on error, default case, test impro…
mattleibow Feb 24, 2026
be4e858
Remove NonFunctionInvokingChatClient, use FunctionCallContent.Informa…
mattleibow Feb 24, 2026
4339e19
Improve ToolCallLoggingTests with proper per-level assertions
mattleibow Feb 24, 2026
df14d62
Split ToolCallLoggingTests into InformationalOnly and Invocable files
mattleibow Feb 24, 2026
55bb8a2
Use .UseLogging(loggerFactory) builder extension in tests
mattleibow Feb 24, 2026
1bba76b
Add tool call logging to AppleIntelligenceChatClient
mattleibow Feb 25, 2026
8ecf22e
Move tool call logging into AIFunctionToolAdapter to wrap invocations
mattleibow Feb 25, 2026
557ccee
Simplify tool call logging to use else-if instead of bool flags
mattleibow Feb 25, 2026
0773e87
Versions
mattleibow Feb 25, 2026
354266a
Revert to simple DI registration for AppleIntelligenceChatClient
mattleibow Feb 25, 2026
77226b9
Add device tests for FICC-style tool invocation logging
mattleibow Feb 25, 2026
3ba6576
Rewrite tool call logging tests with precise assertions
mattleibow Feb 25, 2026
189452b
Extract tool call logging tests into separate file
mattleibow Feb 25, 2026
3c94b79
Fix itinerary workflow stall after rc1 package upgrade
mattleibow Feb 25, 2026
f265847
Replace compactMap with explicit errors in Swift schema decoder
mattleibow Feb 25, 2026
4cc04ee
Upgrade Agent Framework to rc2 and fix workflow stall in TravelPlanne…
mattleibow Feb 26, 2026
5811491
Fix CollectionChanged leak and native streaming cancellation
mattleibow Feb 26, 2026
da59fdf
Add unit and device tests for coverage gaps found via multi-model review
mattleibow Feb 26, 2026
0fbdb79
Use TextSearchProvider for RAG in ResearcherExecutor
mattleibow Feb 26, 2026
8a256f7
Move RAG setup into ResearcherExecutor.CreateAgent factory method
mattleibow Feb 26, 2026
e89469c
Remove double RAG - let AI provide destination details from context
mattleibow Feb 26, 2026
60511cd
This
mattleibow Feb 26, 2026
db19c61
Landmark sorting
mattleibow Feb 26, 2026
9b18398
Simplify executors: move ResponseFormat to agent config, fix cancella…
mattleibow Feb 26, 2026
ab47045
Use AddSwitch for conditional workflow branching
mattleibow Feb 26, 2026
a3033d2
This
mattleibow Feb 26, 2026
5a3bca6
A bit better
mattleibow Feb 26, 2026
7cea55d
Much better
mattleibow Feb 26, 2026
727a2e0
Merge branch 'main' into dev/fix-apple-tools
mattleibow Feb 26, 2026
dcd0cba
not this
mattleibow Feb 26, 2026
261100c
Fix this
mattleibow Feb 26, 2026
3a54464
Fix ChatOverlayView hide/show lifecycle, add test coverage for edge c…
mattleibow Feb 26, 2026
7f29068
Add Essentials.AI.DeviceTests to CI device test pipelines
mattleibow Feb 27, 2026
691b914
Add Essentials.AI.UnitTests to CI unit test pipelines
mattleibow Feb 27, 2026
c769440
Add launchSettings.json for Essentials.AI.DeviceTests Windows build
mattleibow Feb 27, 2026
280ab41
Fix AI unit test paths for Helix compatibility
mattleibow Feb 27, 2026
bdb9d73
Weak-link FoundationModels.framework and skip AI tests on < 26
mattleibow Mar 2, 2026
09c40e8
Use Traits constants for test category attributes
mattleibow Mar 2, 2026
3f1f051
Merge branch 'main' into dev/fix-apple-tools
mattleibow Mar 2, 2026
d54a361
Skip Apple Intelligence tests on CI via Helix TestFilter
mattleibow Mar 2, 2026
2c60502
Add cross-platform smoke tests for AI device test discovery
mattleibow Mar 2, 2026
255805a
Trigger CI rebuild
mattleibow Mar 2, 2026
c8de32c
Fix weak-linking FoundationModels and SmokeTests compilation
mattleibow Mar 2, 2026
9248c0e
Simplify SmokeTests to single infrastructure test
mattleibow Mar 2, 2026
ee2af4d
Fix validation tests: TextContent(null) returns empty string in M.E.A…
mattleibow Mar 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/skills/run-device-tests/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ These are automatically loaded by the Run-DeviceTests.ps1 script.
| Essentials | `src/Essentials/test/DeviceTests/Essentials.DeviceTests.csproj` |
| Graphics | `src/Graphics/tests/DeviceTests/Graphics.DeviceTests.csproj` |
| BlazorWebView | `src/BlazorWebView/tests/DeviceTests/MauiBlazorWebView.DeviceTests.csproj` |
| AI | `src/AI/tests/Essentials.AI.DeviceTests/Essentials.AI.DeviceTests.csproj` |

## Scripts

Expand Down
19 changes: 12 additions & 7 deletions .github/skills/run-device-tests/scripts/Run-DeviceTests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
- Windows: android, windows

.PARAMETER Project
The device test project to run. Valid values: Controls, Core, Essentials, Graphics, BlazorWebView
The device test project to run. Valid values: Controls, Core, Essentials, Graphics, BlazorWebView, AI

.PARAMETER Platform
Target platform. Valid values depend on OS:
Expand Down Expand Up @@ -65,7 +65,7 @@
[CmdletBinding()]
param(
[Parameter(Mandatory = $true, Position = 0)]
[ValidateSet("Controls", "Core", "Essentials", "Graphics", "BlazorWebView")]
[ValidateSet("Controls", "Core", "Essentials", "Graphics", "BlazorWebView", "AI")]
[string]$Project,

[Parameter(Mandatory = $false)]
Expand Down Expand Up @@ -128,6 +128,7 @@ $ProjectPaths = @{
"Essentials" = "src/Essentials/test/DeviceTests/Essentials.DeviceTests.csproj"
"Graphics" = "src/Graphics/tests/DeviceTests/Graphics.DeviceTests.csproj"
"BlazorWebView" = "src/BlazorWebView/tests/DeviceTests/MauiBlazorWebView.DeviceTests.csproj"
"AI" = "src/AI/tests/Essentials.AI.DeviceTests/Essentials.AI.DeviceTests.csproj"
}

$AppNames = @{
Expand All @@ -136,6 +137,7 @@ $AppNames = @{
"Essentials" = "Microsoft.Maui.Essentials.DeviceTests"
"Graphics" = "Microsoft.Maui.Graphics.DeviceTests"
"BlazorWebView" = "Microsoft.Maui.MauiBlazorWebView.DeviceTests"
"AI" = "Microsoft.Maui.Essentials.AI.DeviceTests"
}

# Android package names (lowercase)
Expand All @@ -145,6 +147,7 @@ $AndroidPackageNames = @{
"Essentials" = "com.microsoft.maui.essentials.devicetests"
"Graphics" = "com.microsoft.maui.graphics.devicetests"
"BlazorWebView" = "com.microsoft.maui.mauiblazorwebview.devicetests"
"AI" = "com.microsoft.maui.ai.devicetests"
}

# Platform-specific configurations
Expand Down Expand Up @@ -239,6 +242,8 @@ try {

$projectPath = $ProjectPaths[$Project]
$appName = $AppNames[$Project]
# Derive artifact folder name from the project file name (e.g., "Essentials.AI.DeviceTests" from the .csproj)
$artifactName = [System.IO.Path]::GetFileNameWithoutExtension($projectPath)

Write-Host ""
Write-Host "Project: $Project" -ForegroundColor Yellow
Expand Down Expand Up @@ -316,11 +321,11 @@ try {
# Construct app path based on platform
switch ($Platform) {
"ios" {
$appPath = "artifacts/bin/$Project.DeviceTests/$Configuration/$tfmFolder/$ridFolder/$appName.app"
$appPath = "artifacts/bin/$artifactName/$Configuration/$tfmFolder/$ridFolder/$appName.app"
}
"maccatalyst" {
# MacCatalyst apps may have different names - search for .app bundle
$appSearchPath = "artifacts/bin/$Project.DeviceTests/$Configuration/$tfmFolder/$ridFolder"
$appSearchPath = "artifacts/bin/$artifactName/$Configuration/$tfmFolder/$ridFolder"
$appBundle = Get-ChildItem -Path $appSearchPath -Filter "*.app" -Directory -ErrorAction SilentlyContinue | Select-Object -First 1
if ($appBundle) {
$appPath = $appBundle.FullName
Expand All @@ -330,7 +335,7 @@ try {
}
"android" {
# Android APK path - look for signed APK
$apkSearchPath = "artifacts/bin/$Project.DeviceTests/$Configuration/$tfmFolder"
$apkSearchPath = "artifacts/bin/$artifactName/$Configuration/$tfmFolder"
$apkFile = Get-ChildItem -Path $apkSearchPath -Filter "*-Signed.apk" -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1
if ($apkFile) {
$appPath = $apkFile.FullName
Expand All @@ -345,14 +350,14 @@ try {
}
}
"windows" {
$appPath = "artifacts/bin/$Project.DeviceTests/$Configuration/$tfmFolder/$ridFolder/$appName.exe"
$appPath = "artifacts/bin/$artifactName/$Configuration/$tfmFolder/$ridFolder/$appName.exe"
}
}

if (-not (Test-Path $appPath)) {
Write-Error "Built app not found at: $appPath"
Write-Info "Searching for app in artifacts..."
Get-ChildItem -Path "artifacts/bin/$Project.DeviceTests" -Recurse -ErrorAction SilentlyContinue |
Get-ChildItem -Path "artifacts/bin/$artifactName" -Recurse -ErrorAction SilentlyContinue |
Where-Object { $_.Name -match "$appName" } |
ForEach-Object { Write-Host " Found: $($_.FullName)" }
exit 1
Expand Down
1 change: 1 addition & 0 deletions eng/Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,6 @@
<AdditionalProperties>CodesignRequireProvisioningProfile=false</AdditionalProperties>
</ProjectToBuild>
<ProjectToBuild Include="$(RepoRoot)src/BlazorWebView/tests/DeviceTests/MauiBlazorWebView.DeviceTests.csproj" BuildInParallel="false" />
<ProjectToBuild Include="$(RepoRoot)src/AI/tests/Essentials.AI.DeviceTests/Essentials.AI.DeviceTests.csproj" BuildInParallel="false" />
</ItemGroup>
</Project>
9 changes: 6 additions & 3 deletions eng/Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@
<MicrosoftBclAsyncInterfacesPackageVersion>$(MicrosoftNETCoreAppRefPackageVersion)</MicrosoftBclAsyncInterfacesPackageVersion>
<!-- Microsoft/Extensions -->
<SystemCodeDomPackageVersion>$(MicrosoftNETCoreAppRefPackageVersion)</SystemCodeDomPackageVersion>
<MicrosoftExtensionsAIVersion>10.0.1</MicrosoftExtensionsAIVersion>
<MicrosoftExtensionsAIAbstractionsVersion>10.0.1</MicrosoftExtensionsAIAbstractionsVersion>
<MicrosoftExtensionsAIVersion>10.3.0</MicrosoftExtensionsAIVersion>
<MicrosoftExtensionsAIAbstractionsVersion>10.3.0</MicrosoftExtensionsAIAbstractionsVersion>
<MicrosoftExtensionsConfigurationVersion>10.0.0</MicrosoftExtensionsConfigurationVersion>
<MicrosoftExtensionsConfigurationAbstractionsVersion>10.0.0</MicrosoftExtensionsConfigurationAbstractionsVersion>
<MicrosoftExtensionsConfigurationJsonVersion>10.0.0</MicrosoftExtensionsConfigurationJsonVersion>
Expand All @@ -58,7 +58,10 @@
<MicrosoftExtensionsHostingAbstractionsVersion>10.0.0</MicrosoftExtensionsHostingAbstractionsVersion>
<MicrosoftExtensionsHttpVersion>10.0.0</MicrosoftExtensionsHttpVersion>
<!-- Microsoft Agent Framework -->
<MicrosoftAgentsAIVersion>1.0.0-preview.251204.1</MicrosoftAgentsAIVersion>
<MicrosoftAgentsAIVersion>1.0.0-rc2</MicrosoftAgentsAIVersion>
<MicrosoftAgentsAIWorkflowsVersion>1.0.0-rc2</MicrosoftAgentsAIWorkflowsVersion>
<MicrosoftAgentsAIWorkflowsGeneratorsVersion>1.0.0-rc2</MicrosoftAgentsAIWorkflowsGeneratorsVersion>
<MicrosoftAgentsAIHostingVersion>1.0.0-preview.260225.1</MicrosoftAgentsAIHostingVersion>
<!-- xamarin/xamarin-android -->
<MicrosoftAndroidSdkWindowsPackageVersion>36.1.2</MicrosoftAndroidSdkWindowsPackageVersion>
<MicrosoftNETSdkAndroidManifest90100PackageVersion>35.0.105</MicrosoftNETSdkAndroidManifest90100PackageVersion>
Expand Down
1 change: 1 addition & 0 deletions eng/cake/dotnet.cake
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,7 @@ Task("dotnet-test")
"**/Controls.BindingSourceGen.UnitTests.csproj",
"**/Core.UnitTests.csproj",
"**/Essentials.UnitTests.csproj",
"**/Essentials.AI.UnitTests.csproj",
"**/Resizetizer.UnitTests.csproj",
"**/Graphics.Tests.csproj",
"**/Compatibility.Core.UnitTests.csproj",
Expand Down
1 change: 1 addition & 0 deletions eng/helix.proj
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
<XUnitProject Include="$(RepoRoot)src/Controls/tests/SourceGen.UnitTests/SourceGen.UnitTests.csproj" />
<XUnitProject Include="$(RepoRoot)src/Core/tests/UnitTests/Core.UnitTests.csproj" />
<XUnitProject Include="$(RepoRoot)src/Essentials/test/UnitTests/Essentials.UnitTests.csproj" />
<XUnitProject Include="$(RepoRoot)src/AI/tests/Essentials.AI.UnitTests/Essentials.AI.UnitTests.csproj" />
<XUnitProject Include="$(RepoRoot)src/Graphics/tests/Graphics.Tests/Graphics.Tests.csproj" />
</ItemGroup>

Expand Down
38 changes: 35 additions & 3 deletions eng/helix_xharness.proj
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@
<!-- These categories run as individual work items; skipped from the "Other" work item -->
<ControlsTestCategoriesToSkipForRestOfTests>CollectionView;Shell;HybridWebView</ControlsTestCategoriesToSkipForRestOfTests>
</PropertyGroup>

<!-- AI test categories to skip on CI (Apple Intelligence models are not available on Helix machines) -->
<PropertyGroup Condition="'$(TargetOS)' == 'ios' or '$(TargetOS)' == 'maccatalyst'">
<AITestCategoriesToSkipOnCI>AppleIntelligenceChatClient</AITestCategoriesToSkipOnCI>
</PropertyGroup>
<ItemGroup Condition="'$(TargetOS)' == 'ios'">
<ControlsTestCategoriesToRunIndividually Include="$(ControlsTestCategoriesToSkipForRestOfTests)" />
</ItemGroup>
Expand Down Expand Up @@ -119,6 +124,15 @@
<WindowsPackageId>Microsoft.Maui.MauiBlazorWebView.DeviceTests</WindowsPackageId>
<WindowsProjectPath>src/BlazorWebView/tests/DeviceTests/MauiBlazorWebView.DeviceTests.csproj</WindowsProjectPath>
</MAUIScenario>

<MAUIScenario Include="EssentialsAI">
<ScenarioDirectoryName>Essentials.AI.DeviceTests</ScenarioDirectoryName>
<PayloadDirectory>$(ScenariosDir)Essentials.AI.DeviceTests</PayloadDirectory>
<IPAName>Microsoft.Maui.Essentials.AI.DeviceTests</IPAName>
<PackageName>com.microsoft.maui.ai.devicetests</PackageName>
<WindowsPackageId>com.microsoft.maui.ai.devicetests</WindowsPackageId>
<WindowsProjectPath>src/AI/tests/Essentials.AI.DeviceTests/Essentials.AI.DeviceTests.csproj</WindowsProjectPath>
</MAUIScenario>
</ItemGroup>

<!-- Process each test scenario individually using direct path construction -->
Expand Down Expand Up @@ -173,15 +187,33 @@
<WorkItemTimeout>02:00:00</WorkItemTimeout>
<TestTimeout>01:00:00</TestTimeout>
</XHarnessAppBundleToTest>
<XHarnessAppBundleToTest Include="$([System.IO.Directory]::GetDirectories('$(ScenariosDir)Essentials.AI.DeviceTests/Release/$(TargetFrameworkToTest)-ios/', '*.app', System.IO.SearchOption.AllDirectories))">
<TestTarget>ios-simulator-64</TestTarget>
<WorkItemTimeout>02:00:00</WorkItemTimeout>
<TestTimeout>01:00:00</TestTimeout>
<CustomCommands>xharness apple test --target "$target" --app "$app" --output-directory "$output_directory" --timeout "$timeout" --launch-timeout "$launch_timeout" --set-env="TestFilter=SkipCategories=$(AITestCategoriesToSkipOnCI)"</CustomCommands>
</XHarnessAppBundleToTest>
</ItemGroup>

<!-- MacCatalyst and Android: Use the original MAUIScenario approach (no category splitting) -->
<!-- MacCatalyst: Use the original MAUIScenario approach, except EssentialsAI which needs custom test filtering -->
<ItemGroup Condition="'$(TargetOS)' == 'maccatalyst'">
<XHarnessAppBundleToTest Include="$([System.IO.Directory]::GetDirectories('%(_MAUIScenarioSearch.PayloadDirectory)/Release/$(TargetFrameworkToTest)-maccatalyst/', '*.app', System.IO.SearchOption.AllDirectories))">
<!-- Exclude EssentialsAI from batch - it needs custom test filter to skip Apple Intelligence on CI -->
<_MAUIScenarioSearchMacCatalyst Include="@(_MAUIScenarioSearch)" />
<_MAUIScenarioSearchMacCatalyst Remove="EssentialsAI" />

<XHarnessAppBundleToTest Include="$([System.IO.Directory]::GetDirectories('%(_MAUIScenarioSearchMacCatalyst.PayloadDirectory)/Release/$(TargetFrameworkToTest)-maccatalyst/', '*.app', System.IO.SearchOption.AllDirectories))">
<TestTarget>maccatalyst</TestTarget>
<WorkItemTimeout>02:00:00</WorkItemTimeout>
<TestTimeout>01:00:00</TestTimeout>
<WorkItemPrefix>%(_MAUIScenarioSearchMacCatalyst.ScenarioDirectoryName)</WorkItemPrefix>
</XHarnessAppBundleToTest>

<!-- EssentialsAI MacCatalyst - skip Apple Intelligence tests on CI (model not available on Helix machines) -->
<XHarnessAppBundleToTest Include="$([System.IO.Directory]::GetDirectories('$(ScenariosDir)Essentials.AI.DeviceTests/Release/$(TargetFrameworkToTest)-maccatalyst/', '*.app', System.IO.SearchOption.AllDirectories))">
<TestTarget>maccatalyst</TestTarget>
<WorkItemTimeout>02:00:00</WorkItemTimeout>
<TestTimeout>01:00:00</TestTimeout>
<WorkItemPrefix>%(_MAUIScenarioSearch.ScenarioDirectoryName)</WorkItemPrefix>
<CustomCommands>xharness apple test --target "$target" --app "$app" --output-directory "$output_directory" --timeout "$timeout" --launch-timeout "$launch_timeout" --set-env="TestFilter=SkipCategories=$(AITestCategoriesToSkipOnCI)"</CustomCommands>
</XHarnessAppBundleToTest>
</ItemGroup>

Expand Down
8 changes: 6 additions & 2 deletions eng/pipelines/arcade/stage-device-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,9 @@ parameters:
- name: MauiBlazorWebView.DeviceTests
path: src/BlazorWebView/tests/DeviceTests/MauiBlazorWebView.DeviceTests.csproj
packageId: Microsoft.Maui.MauiBlazorWebView.DeviceTests
- name: Essentials.AI.DeviceTests
path: src/AI/tests/Essentials.AI.DeviceTests/Essentials.AI.DeviceTests.csproj
packageId: com.microsoft.maui.ai.devicetests

stages:
- stage: devicetests_build
Expand Down Expand Up @@ -465,7 +468,7 @@ stages:

# Save unpackaged publish output before packaged builds overwrite artifacts/bin
- pwsh: |
$artifactNames = @("Controls.DeviceTests", "Core.DeviceTests", "Graphics.DeviceTests", "Essentials.DeviceTests", "MauiBlazorWebView.DeviceTests")
$artifactNames = @("Controls.DeviceTests", "Core.DeviceTests", "Graphics.DeviceTests", "Essentials.DeviceTests", "MauiBlazorWebView.DeviceTests", "Essentials.AI.DeviceTests")
foreach ($name in $artifactNames) {
$publishDir = Get-ChildItem -Path "$(Build.SourcesDirectory)/artifacts/bin/$name" -Filter "publish" -Recurse -Directory | Select-Object -First 1
if ($publishDir) {
Expand Down Expand Up @@ -498,7 +501,8 @@ stages:
@{ Name = "Core.DeviceTests"; ProjectDir = "$(Build.SourcesDirectory)/src/Core/tests/DeviceTests"; ArtifactDir = "$(Build.SourcesDirectory)/artifacts/bin/Core.DeviceTests" },
@{ Name = "Graphics.DeviceTests"; ProjectDir = "$(Build.SourcesDirectory)/src/Graphics/tests/DeviceTests"; ArtifactDir = "$(Build.SourcesDirectory)/artifacts/bin/Graphics.DeviceTests" },
@{ Name = "Essentials.DeviceTests"; ProjectDir = "$(Build.SourcesDirectory)/src/Essentials/test/DeviceTests"; ArtifactDir = "$(Build.SourcesDirectory)/artifacts/bin/Essentials.DeviceTests" },
@{ Name = "MauiBlazorWebView.DeviceTests"; ProjectDir = "$(Build.SourcesDirectory)/src/BlazorWebView/tests/DeviceTests"; ArtifactDir = "$(Build.SourcesDirectory)/artifacts/bin/MauiBlazorWebView.DeviceTests" }
@{ Name = "MauiBlazorWebView.DeviceTests"; ProjectDir = "$(Build.SourcesDirectory)/src/BlazorWebView/tests/DeviceTests"; ArtifactDir = "$(Build.SourcesDirectory)/artifacts/bin/MauiBlazorWebView.DeviceTests" },
@{ Name = "Essentials.AI.DeviceTests"; ProjectDir = "$(Build.SourcesDirectory)/src/AI/tests/Essentials.AI.DeviceTests"; ArtifactDir = "$(Build.SourcesDirectory)/artifacts/bin/Essentials.AI.DeviceTests" }
)

foreach ($project in $projects) {
Expand Down
12 changes: 12 additions & 0 deletions eng/pipelines/device-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -216,3 +216,15 @@ stages:
ios: $(System.DefaultWorkingDirectory)/src/BlazorWebView/tests/DeviceTests/MauiBlazorWebView.DeviceTests.csproj
catalyst: $(System.DefaultWorkingDirectory)/src/BlazorWebView/tests/DeviceTests/MauiBlazorWebView.DeviceTests.csproj
windows: $(System.DefaultWorkingDirectory)/src/BlazorWebView/tests/DeviceTests/MauiBlazorWebView.DeviceTests.csproj
- name: essentialsai
desc: Essentials.AI
androidApiLevelsExclude: [ 25, 27 ]
androidApiLevelsCoreClrExclude: [ 27, 25, 23]
androidConfiguration: 'Release'
iOSConfiguration: 'Debug'
windowsConfiguration: 'Debug'
windowsPackageId: 'com.microsoft.maui.ai.devicetests'
android: $(System.DefaultWorkingDirectory)/src/AI/tests/Essentials.AI.DeviceTests/Essentials.AI.DeviceTests.csproj
ios: $(System.DefaultWorkingDirectory)/src/AI/tests/Essentials.AI.DeviceTests/Essentials.AI.DeviceTests.csproj
catalyst: $(System.DefaultWorkingDirectory)/src/AI/tests/Essentials.AI.DeviceTests/Essentials.AI.DeviceTests.csproj
windows: $(System.DefaultWorkingDirectory)/src/AI/tests/Essentials.AI.DeviceTests/Essentials.AI.DeviceTests.csproj
Loading
Loading