diff --git a/eng/devices/android.cake b/eng/devices/android.cake index 3659b1d1e817..0343de11a055 100644 --- a/eng/devices/android.cake +++ b/eng/devices/android.cake @@ -11,7 +11,7 @@ const string dotnetVersion = "net8.0"; // required FilePath PROJECT = Argument("project", EnvironmentVariable("ANDROID_TEST_PROJECT") ?? ""); -string TEST_DEVICE = Argument("device", EnvironmentVariable("ANDROID_TEST_DEVICE") ?? $"android-emulator-32_{defaultVersion}"); +string TEST_DEVICE = Argument("device", EnvironmentVariable("ANDROID_TEST_DEVICE") ?? $"android-emulator-64_{defaultVersion}"); string DEVICE_NAME = Argument("skin", EnvironmentVariable("ANDROID_TEST_SKIN") ?? "Nexus 5X"); // optional @@ -83,25 +83,33 @@ Setup(context => if (parts[0] != "android") throw new Exception("Unexpected platform (expected: android) in device: " + TEST_DEVICE); // device/emulator + Information("Create for: {0}", parts[1]); if (parts[1] == "device") emulator = false; else if (parts[1] != "emulator" && parts[1] != "simulator") throw new Exception("Unexpected device type (expected: device|emulator) in device: " + TEST_DEVICE); // arch/bits + Information("Host OS System Arch: {0}", System.Runtime.InteropServices.RuntimeInformation.OSArchitecture); + Information("Host Processor System Arch: {0}", System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture); if (parts[2] == "32") { if (emulator) DEVICE_ARCH = "x86"; else DEVICE_ARCH = "armeabi-v7a"; } else if (parts[2] == "64") { - if (emulator) + if (System.Runtime.InteropServices.RuntimeInformation.OSArchitecture == System.Runtime.InteropServices.Architecture.Arm64) + DEVICE_ARCH = "arm64-v8a"; + else if (emulator) DEVICE_ARCH = "x86_64"; else DEVICE_ARCH = "arm64-v8a"; } - var sdk = api >= 24 ? "google_apis_playstore" : "google_apis"; + var sdk = api >= 28 ? "google_apis_playstore" : "google_apis"; + if (api == 27 && DEVICE_ARCH == "x86_64") + sdk = "default"; DEVICE_ID = $"system-images;android-{api};{sdk};{DEVICE_ARCH}"; + Information("Going to run image: {0}", DEVICE_ID); // we are not using a virtual device, so quit if (!emulator) return; diff --git a/eng/pipelines/common/device-tests.yml b/eng/pipelines/common/device-tests.yml index eccdd14e8a4a..9c4aa4fa5bce 100644 --- a/eng/pipelines/common/device-tests.yml +++ b/eng/pipelines/common/device-tests.yml @@ -2,6 +2,7 @@ parameters: androidPool: { } iosPool: { } catalystPool: { } + windowsPool: { } androidApiLevels: [ 33 ] iosVersions: [ 'latest' ] catalystVersions: [ 'latest' ] @@ -36,13 +37,9 @@ stages: ${{ each api in parameters.androidApiLevels }}: ${{ if not(containsValue(project.androidApiLevelsExclude, api)) }}: ${{ replace(coalesce(project.desc, project.name), ' ', '_') }}_API_${{ api }}: - ${{ if ge(api, 24) }}: - ANDROID_EMULATORS: "system-images;android-${{ api }};google_apis_playstore;x86" - ${{ else }}: - ANDROID_EMULATORS: "system-images;android-${{ api }};google_apis;x86" REQUIRED_XCODE: $(DEVICETESTS_REQUIRED_XCODE) PROJECT_PATH: ${{ project.android }} - DEVICE: android-emulator-32_${{ api }} + DEVICE: android-emulator-64_${{ api }} steps: - template: device-tests-steps.yml parameters: @@ -139,8 +136,7 @@ stages: workspace: clean: all displayName: "Windows device tests" - pool: - vmImage: windows-latest + pool: ${{ parameters.windowsPool }} strategy: matrix: # create all the variables used for the matrix diff --git a/eng/pipelines/common/insertion.yml b/eng/pipelines/common/insertion.yml index 3d3d94b25951..b7e0f59b5e19 100644 --- a/eng/pipelines/common/insertion.yml +++ b/eng/pipelines/common/insertion.yml @@ -3,21 +3,6 @@ parameters: vmImage: windows-latest stages: - - template: vs-insertion/stage/v1.yml@yaml-templates - parameters: - dependsOn: nuget_signing - approvalTimeoutInMinutes: 1 - symbolArtifactName: nuget - symbolArtifactPatterns: | - **/signed/*.nupkg - **/*.snupkg - **/additional-assets.zip - pushToShippingFeed: true - nupkgArtifactName: nuget - nupkgArtifactPatterns: | - **/signed/*.nupkg - msiNupkgArtifactName: vs-msi-nugets - - stage: sdk_insertion displayName: 'SDK Insertion' dependsOn: nuget_signing diff --git a/eng/pipelines/common/provision.yml b/eng/pipelines/common/provision.yml index e3c15eb35faa..ea00dbd8c88b 100644 --- a/eng/pipelines/common/provision.yml +++ b/eng/pipelines/common/provision.yml @@ -59,8 +59,9 @@ steps: echo "##vso[task.setvariable variable=JI_JAVA_HOME]$(JAVA_HOME_11_X64)" echo "##vso[task.setvariable variable=JAVA_HOME]$(JAVA_HOME_11_X64)" displayName: 'Setup JDK Paths' - condition: and(succeeded(), eq(variables['Agent.OS'], 'Darwin')) + condition: and(succeeded(), eq(variables['Agent.OS'], 'Darwin')) # Configure VS Mac for Xcode + # This seems to be needed or else it will pick other xcode for example on xharness - bash: | set -x mkdir -p ~/Library/Preferences/Xamarin @@ -69,32 +70,6 @@ steps: cat ~/Library/Preferences/Xamarin/Settings.plist || true displayName: 'Configure Visual Studio' condition: and(succeeded(), eq(variables['Agent.OS'], 'Darwin')) - # Install Certificates and Provisioning Profiles - # - task: InstallAppleProvisioningProfile@1 - # displayName: 'Install the iOS provisioning profile' - # condition: and(succeeded(), eq(variables['Agent.OS'], 'Darwin')) - # inputs: - # provProfileSecureFile: 'Components iOS Provisioning.mobileprovision' - # - task: InstallAppleProvisioningProfile@1 - # displayName: 'Install the macOS provisioning profile' - # condition: and(succeeded(), eq(variables['Agent.OS'], 'Darwin')) - # inputs: - # provProfileSecureFile: 'Components Mac Provisioning.mobileprovision' - # - task: InstallAppleProvisioningProfile@1 - # displayName: 'Install the tvOS provisioning profile' - # condition: and(succeeded(), eq(variables['Agent.OS'], 'Darwin')) - # inputs: - # provProfileSecureFile: 'Components tvOS Provisioning.mobileprovision' - # - task: InstallAppleCertificate@2 - # displayName: 'Install the iOS certificate' - # condition: and(succeeded(), eq(variables['Agent.OS'], 'Darwin')) - # inputs: - # certSecureFile: 'Components iOS Certificate.p12' - # - task: InstallAppleCertificate@2 - # condition: eq(variables['System.JobName'], 'macos') - # displayName: 'Install the macOS certificate' - # inputs: - # certSecureFile: 'Components Mac Certificate.p12' # Prepare Windows - powershell: | @@ -183,18 +158,6 @@ steps: dotnet --list-sdks displayName: 'Show .NET SDK info' - - pwsh: ./build.ps1 --target provision - displayName: 'Cake Provision' - condition: eq(variables['provisioningCake'], 'true') - - - task: PowerShell@2 - condition: eq(variables['PrivateBuild'], 'true') - displayName: Setup Private Feeds Credentials - inputs: - filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 - arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config -Password $Env:Token - env: - Token: $(dn-bot-dnceng-artifact-feeds-rw) - pwsh: dotnet nuget locals all --clear displayName: 'Clear all NuGet caches' @@ -210,3 +173,11 @@ steps: # $xml.configuration.RemoveChild($xml.configuration.disabledPackageSources) # $xml.Save($path) # displayName: 'Add "wasdk-internal" to NuGet.config' + # - task: PowerShell@2 + # condition: eq(variables['PrivateBuild'], 'true') + # displayName: Setup Private Feeds Credentials + # inputs: + # filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 + # arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config -Password $Env:Token + # env: + # Token: $(dn-bot-dnceng-artifact-feeds-rw) diff --git a/eng/pipelines/common/ui-tests-steps.yml b/eng/pipelines/common/ui-tests-steps.yml index 5283e978a2b0..186647546c16 100644 --- a/eng/pipelines/common/ui-tests-steps.yml +++ b/eng/pipelines/common/ui-tests-steps.yml @@ -33,7 +33,7 @@ steps: - task: NodeTool@0 inputs: - versionSpec: "18.13.0" + versionSpec: "20.3.1" displayName: "Install node" - pwsh: ./eng/scripts/appium-install.ps1 @@ -43,7 +43,7 @@ steps: - pwsh: ./build.ps1 --target=dotnet --configuration="${{ parameters.configuration }}" --verbosity=diagnostic displayName: 'Install .NET' - retryCountOnTaskFailure: 3 + retryCountOnTaskFailure: 2 env: DOTNET_TOKEN: $(dotnetbuilds-internal-container-read-token) PRIVATE_BUILD: $(PrivateBuild) diff --git a/eng/pipelines/common/ui-tests.yml b/eng/pipelines/common/ui-tests.yml index 0a206145abd0..69b366535db1 100644 --- a/eng/pipelines/common/ui-tests.yml +++ b/eng/pipelines/common/ui-tests.yml @@ -40,10 +40,6 @@ stages: displayName: ${{ coalesce(project.desc, project.name) }} (API ${{ api }}) pool: ${{ parameters.androidPool }} variables: - ${{ if ge(api, 24) }}: - ANDROID_EMULATORS: "system-images;android-${{ api }};google_apis_playstore;x86" - ${{ if lt(api, 24) }}: - ANDROID_EMULATORS: "system-images;android-${{ api }};google_apis;x86" REQUIRED_XCODE: $(DEVICETESTS_REQUIRED_XCODE) steps: - template: ui-tests-steps.yml @@ -52,7 +48,7 @@ stages: version: ${{ api }} path: ${{ project.android }} app: ${{ project.app }} - device: android-emulator-32_${{ api }} + device: android-emulator-64_${{ api }} provisionatorChannel: ${{ parameters.provisionatorChannel }} agentPoolAccessToken: ${{ parameters.agentPoolAccessToken }} @@ -153,10 +149,6 @@ stages: displayName: ${{ coalesce(project.desc, project.name) }} (API ${{ api }}) pool: ${{ parameters.androidCompatibilityPool }} variables: - ${{ if ge(api, 24) }}: - ANDROID_EMULATORS: "system-images;android-${{ api }};google_apis_playstore;x86" - ${{ if lt(api, 24) }}: - ANDROID_EMULATORS: "system-images;android-${{ api }};google_apis;x86" REQUIRED_XCODE: $(DEVICETESTS_REQUIRED_XCODE) steps: - template: ui-tests-compatibility-steps.yml @@ -168,7 +160,7 @@ stages: path: ${{ project.compatibilityAndroidTestProject }} app: ${{ project.compatibilityAndroidApp }} targetSample: "dotnet-legacy-controlgallery-android" - device: android-emulator-32_${{ api }} + device: android-emulator-64_${{ api }} provisionatorChannel: ${{ parameters.provisionatorChannel }} agentPoolAccessToken: ${{ parameters.agentPoolAccessToken }} diff --git a/eng/pipelines/device-tests.yml b/eng/pipelines/device-tests.yml index fc319ec92fd6..606a4913ad3d 100644 --- a/eng/pipelines/device-tests.yml +++ b/eng/pipelines/device-tests.yml @@ -56,6 +56,7 @@ parameters: - name: BuildEverything type: boolean default: false + - name: androidPool type: object default: @@ -64,17 +65,25 @@ parameters: demands: - macOS.Name -equals Ventura - macOS.Architecture -equals x64 + - name: iosPool type: object default: name: $(iosTestsVmPool) vmImage: $(iosTestsVmImage) + - name: catalystPool type: object default: name: $(iosTestsVmPool) vmImage: $(iosTestsVmImage) + - name: windowsPool + type: object + default: + name: $(windowsTestsVmPool) + vmImage: $(windowsTestsVmImage) + resources: repositories: - repository: yaml-templates @@ -90,6 +99,7 @@ stages: androidPool: ${{ parameters.androidPool }} iosPool: ${{ parameters.iosPool }} catalystPool: ${{ parameters.catalystPool }} + windowsPool: ${{ parameters.windowsPool }} agentPoolAccessToken: $(AgentPoolAccessToken) ${{ if or(parameters.BuildEverything, and(ne(variables['Build.Reason'], 'PullRequest'), eq(variables['System.TeamProject'], 'devdiv'))) }}: androidApiLevels: [ 30, 29, 28, 27, 26, 25, 24, 23 ] diff --git a/eng/pipelines/maui-release.yml b/eng/pipelines/maui-release.yml index ae44b708c26f..2eb14103a67e 100644 --- a/eng/pipelines/maui-release.yml +++ b/eng/pipelines/maui-release.yml @@ -37,8 +37,6 @@ parameters: - name: Windows poolName: $(windowsNet6VmPool) vmImage: $(windowsNet6VmImage) - bootsAndroid: $(Android.Msi) - bootsiOS: $(iOS.Msi) artifact: nuget resources: diff --git a/eng/provisioning/provisioning.csx b/eng/provisioning/provisioning.csx index e3428faef44c..2281973e44de 100644 --- a/eng/provisioning/provisioning.csx +++ b/eng/provisioning/provisioning.csx @@ -25,74 +25,38 @@ if(String.IsNullOrWhiteSpace(ANDROID_API_SDKS)) .ApiLevel((AndroidApiLevel)31) .ApiLevel((AndroidApiLevel)32) .ApiLevel((AndroidApiLevel)33) - .ApiLevel((AndroidApiLevel)34) - .VirtualDevice( - "Android_API23", - (AndroidApiLevel)23, - AndroidSystemImageApi.Google, - AndroidSystemImageAbi.x86, - AndroidVirtualDevice.NEXUS_5X) - .VirtualDevice( - "Android_API24", - AndroidApiLevel.Nougat, - AndroidSystemImageApi.GooglePlayStore, - AndroidSystemImageAbi.x86, - AndroidVirtualDevice.NEXUS_5X) - .VirtualDevice( - "Android_API25", - AndroidApiLevel.Nougat_7_1, - AndroidSystemImageApi.GooglePlayStore, - AndroidSystemImageAbi.x86, - AndroidVirtualDevice.NEXUS_5X) - .VirtualDevice( - "Android_API26", - AndroidApiLevel.Oreo, - AndroidSystemImageApi.GooglePlayStore, - AndroidSystemImageAbi.x86, - AndroidVirtualDevice.NEXUS_5X) - .VirtualDevice( - "Android_API27", - AndroidApiLevel.Oreo_8_1 , - AndroidSystemImageApi.GooglePlayStore, - AndroidSystemImageAbi.x86, - AndroidVirtualDevice.NEXUS_5X) - .VirtualDevice( - "Android_API28", - AndroidApiLevel.P, - AndroidSystemImageApi.GooglePlayStore, - AndroidSystemImageAbi.x86, - AndroidVirtualDevice.NEXUS_5X) - .VirtualDevice( - "Android_API29", - AndroidApiLevel.Q, - AndroidSystemImageApi.GooglePlayStore, - AndroidSystemImageAbi.x86, - AndroidVirtualDevice.NEXUS_5X) - .VirtualDevice( - "Android_API30", - AndroidApiLevel.R, - AndroidSystemImageApi.GooglePlayStore, - AndroidSystemImageAbi.x86, - AndroidVirtualDevice.NEXUS_5X) - // .VirtualDevice( - // "Android_API31", - // AndroidApiLevel.Android_12, - // AndroidSystemImageApi.GooglePlayStore, - // AndroidSystemImageAbi.x86, - // AndroidVirtualDevice.NEXUS_5X) - // .VirtualDevice( - // "Android_API32", - // AndroidApiLevel.Android_12sv2, - // AndroidSystemImageApi.GooglePlayStore, - // AndroidSystemImageAbi.x86, - // AndroidVirtualDevice.NEXUS_5X) - // .VirtualDevice( - // "Android_API33", - // AndroidApiLevel.Android_13, - // AndroidSystemImageApi.GooglePlayStore, - // AndroidSystemImageAbi.x86, - // AndroidVirtualDevice.NEXUS_5X) - .SdkManagerPackage ("build-tools;33.0.0"); + .VirtualDevice("Android_x64_API23", (AndroidApiLevel)23, AndroidSystemImageApi.Google, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_x64_API24", (AndroidApiLevel)24, AndroidSystemImageApi.Google, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_x64_API25", (AndroidApiLevel)25, AndroidSystemImageApi.Google, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_x64_API26", (AndroidApiLevel)26, AndroidSystemImageApi.Google, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_x64_API27", (AndroidApiLevel)27, AndroidSystemImageApi.Default, /*!!*/ AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_x64_API28", (AndroidApiLevel)28, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_x64_API29", (AndroidApiLevel)29, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_x64_API30", (AndroidApiLevel)30, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_x64_API31", (AndroidApiLevel)31, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_x64_API32", (AndroidApiLevel)32, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_x64_API33", (AndroidApiLevel)33, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_x64_API34", (AndroidApiLevel)34, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X); + + + if (IsArm64) + { + AndroidSdk() + .VirtualDevice("Android_arm64_API23", (AndroidApiLevel)23, AndroidSystemImageApi.Google, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_arm64_API24", (AndroidApiLevel)24, AndroidSystemImageApi.Google, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_arm64_API25", (AndroidApiLevel)25, AndroidSystemImageApi.Google, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_arm64_API26", (AndroidApiLevel)26, AndroidSystemImageApi.Google, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_arm64_API27", (AndroidApiLevel)27, AndroidSystemImageApi.Google, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_arm64_API28", (AndroidApiLevel)28, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_arm64_API29", (AndroidApiLevel)29, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_arm64_API30", (AndroidApiLevel)30, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_arm64_API31", (AndroidApiLevel)31, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_arm64_API32", (AndroidApiLevel)32, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_arm64_API33", (AndroidApiLevel)33, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X) + .VirtualDevice("Android_arm64_API34", (AndroidApiLevel)34, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X); + } + + AndroidSdk().SdkManagerPackage ("build-tools;33.0.0"); } else { diff --git a/eng/scripts/appium-install.ps1 b/eng/scripts/appium-install.ps1 index 7e88ec5552c9..89c4902f27ef 100644 --- a/eng/scripts/appium-install.ps1 +++ b/eng/scripts/appium-install.ps1 @@ -45,49 +45,87 @@ param [string] $macDriverVersion = '1.6.3' ) +Write-Output "Welcome to the Appium installer" node -v + +Write-Output "Updating npm" npm install -g npm + +Write-Output "Node version" node -v + +Write-Output "Check if appium is installed" +npm list -g | grep appium + +$modulesFolder = "/Users/builder/azdo/_work/_tool/node/20.3.1/x64/lib/node_modules/appium" +if (Test-Path -Path $modulesFolder ) { + Write-Output "appium exists!" + + $existingDrivers = appium driver list --installed --json | ConvertFrom-Json + Write-Output "List of installed drivers $x" + if($existingDrivers.windows) + { + Write-Output "Uninstalling appium driver windows" + appium driver uninstall windows + Write-Output "Unistalled appium driver windows" + } + + if($existingDrivers.uiautomator2) + { + Write-Output "Uninstalling appium driver uiautomator2" + appium driver uninstall uiautomator2 + Write-Output "Unistalled appium driver uiautomator2" + } + + if($existingDrivers.xcuitest) + { + Write-Output "Uninstalling appium driver xcuitest" + appium driver uninstall xcuitest + Write-Output "Unistalled appium driver xcuitest" + } + + if($existingDrivers.mac2) + { + Write-Output "Uninstalling appium driver mac2" + appium driver uninstall mac2 + Write-Output "Unistalled appium driver mac2" + } + + Write-Output "Uninstalling appium" + npm uninstall -g appium + Write-Output "Unistalled appium" + #rm -rf $modulesFolder +} else { + Write-Output "node_modules doesn't exist." +} + +Write-Output "Check if appium is installed after uninstall" +npm list -g | grep appium + +Write-Output "Installing appium $appiumVersion" npm install -g appium@$appiumVersion +write-Output "Installed appium" appium -v -$x = appium driver list --installed --json | ConvertFrom-Json -if(!$x.windows) -{ - appium driver install --source=npm appium-windows-driver@$windowsDriverVersion -} -else -{ - appium driver uninstall windows - appium driver install --source=npm appium-windows-driver@$windowsDriverVersion -} +$drivers = appium driver list --installed --json | ConvertFrom-Json +Write-Output "List of installed drivers $drivers" -if(!$x.uiautomator2) -{ - appium driver install uiautomator2@$androidDriverVersion -} -else -{ - appium driver uninstall uiautomator2 - appium driver install uiautomator2@$androidDriverVersion -} +Write-Output "Going to install appium drivers windows $windowsDriverVersion, uiautomator2 $androidDriverVersion, xcuitest $iOSDriverVersion and mac2 $macDriverVersio" -if(!$x.xcuitest) -{ - appium driver install xcuitest@$iOSDriverVersion -} -else -{ - appium driver uninstall xcuitest - appium driver install xcuitest@$iOSDriverVersion -} +Write-Output "Installing appium driver windows $windowsDriverVersion" +appium driver install --source=npm appium-windows-driver@$windowsDriverVersion +Write-Output "Installed appium driver windows" -if(!$x.mac2) -{ - appium driver install mac2@$macDriverVersion -} -else -{ - appium driver uninstall mac2 - appium driver install mac2@$macDriverVersion -} \ No newline at end of file +Write-Output "Installing appium driver uiautomator2 $androidDriverVersion" +appium driver install uiautomator2@$androidDriverVersion +Write-Output "Installed appium driver uiautomator2" + +Write-Output "Installing appium driver xcuitest $iOSDriverVersion" +appium driver install xcuitest@$iOSDriverVersion +Write-Output "Installed appium driver xcuitest" + +Write-Output "Installing appium driver mac2 $macDriverVersion" +appium driver install mac2@$macDriverVersion +Write-Output "Installed appium driver mac2" + +Write-Output "Done, thanks!" \ No newline at end of file diff --git a/src/Compatibility/ControlGallery/src/Issues.Shared/ShellInsets.cs b/src/Compatibility/ControlGallery/src/Issues.Shared/ShellInsets.cs index 3dfeff4b5d97..e1d9e279c49b 100644 --- a/src/Compatibility/ControlGallery/src/Issues.Shared/ShellInsets.cs +++ b/src/Compatibility/ControlGallery/src/Issues.Shared/ShellInsets.cs @@ -318,6 +318,7 @@ View CreateEntryInsetView() #if UITEST && __IOS__ [Test] + [Compatibility.UITests.FailsOnMauiIOS] public void EntryScrollTest() { RunningApp.Tap(EntryTest); diff --git a/src/Compatibility/Core/src/Android/Cells/EntryCellRenderer.cs b/src/Compatibility/Core/src/Android/Cells/EntryCellRenderer.cs index 429e9c9a4585..5ef699044f44 100644 --- a/src/Compatibility/Core/src/Android/Cells/EntryCellRenderer.cs +++ b/src/Compatibility/Core/src/Android/Cells/EntryCellRenderer.cs @@ -92,7 +92,8 @@ void OnEditingCompleted() void OnTextChanged(string text) { var entryCell = (EntryCell)Cell; - entryCell.Text = text; + entryCell + .SetValue(EntryCell.TextProperty, text, specificity: SetterSpecificity.FromHandler); } void UpdateHeight() diff --git a/src/Compatibility/Core/src/iOS/Cells/EntryCellRenderer.cs b/src/Compatibility/Core/src/iOS/Cells/EntryCellRenderer.cs index eb6a6dd65a7b..7602045a5deb 100644 --- a/src/Compatibility/Core/src/iOS/Cells/EntryCellRenderer.cs +++ b/src/Compatibility/Core/src/iOS/Cells/EntryCellRenderer.cs @@ -90,7 +90,8 @@ static void OnTextFieldTextChanged(object sender, EventArgs eventArgs) var cell = (EntryCellTableViewCell)sender; var model = (EntryCell)cell.Cell; - model.Text = cell.TextField.Text; + model + .SetValue(EntryCell.TextProperty, cell.TextField.Text, specificity: SetterSpecificity.FromHandler); } static void UpdateHorizontalTextAlignment(EntryCellTableViewCell cell, EntryCell entryCell) diff --git a/src/Controls/samples/Controls.Sample.UITests/Issues/Issue14257.cs b/src/Controls/samples/Controls.Sample.UITests/Issues/Issue14257.cs index 3dde0da98647..d4b04c2248fd 100644 --- a/src/Controls/samples/Controls.Sample.UITests/Issues/Issue14257.cs +++ b/src/Controls/samples/Controls.Sample.UITests/Issues/Issue14257.cs @@ -26,10 +26,11 @@ protected override void Init() scrollView.Content = layout; Content = scrollView; - resizeButton.Clicked += (sender, args) => { + resizeButton.Clicked += (sender, args) => + { // Resize the ScrollView content so the test button will be off the screen // If the bug is present, this will make the button untappable - layoutContent.HeightRequest = 1000; + layoutContent.HeightRequest = 1000; }; // Show the Success label if the button is tapped, so we can verify the bug is not present diff --git a/src/Controls/samples/Controls.Sample/Pages/Controls/EditorPage.xaml b/src/Controls/samples/Controls.Sample/Pages/Controls/EditorPage.xaml index 1a9a97560863..1431528b4999 100644 --- a/src/Controls/samples/Controls.Sample/Pages/Controls/EditorPage.xaml +++ b/src/Controls/samples/Controls.Sample/Pages/Controls/EditorPage.xaml @@ -39,6 +39,20 @@ Style="{StaticResource Headline}" /> +