diff --git a/MUXControlsInnerLoop.sln b/MUXControlsInnerLoop.sln index a70b9742e6..b707e68631 100644 --- a/MUXControlsInnerLoop.sln +++ b/MUXControlsInnerLoop.sln @@ -1,4 +1,4 @@ - + Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29009.5 @@ -342,6 +342,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TabView", "TabView", "{B3E6 EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TabView", "dev\TabView\TabView.vcxitems", "{B9F81FEF-1E8D-4FE1-A46B-7002D4C109D2}" EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "TabView_APITests", "dev\TabView\APITests\TabView_APITests.shproj", "{2F4E95E9-F729-481C-B9AA-C9BEC91AE395}" +EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "TabView_InteractionTests", "dev\TabView\InteractionTests\TabView_InteractionTests.shproj", "{D1E297B4-5E5B-4807-8624-4141C817A98A}" EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "TabView_TestUI", "dev\TabView\TestUI\TabView_TestUI.shproj", "{1D87AAC7-1E11-40FC-90A7-B6CE1C4567AE}" @@ -533,6 +535,7 @@ Global dev\SplitButton\TestUI\SplitButton_TestUI.projitems*{280c91f4-96b5-4bde-9e02-e573e1def583}*SharedItemsImports = 13 dev\Repeater\TestUI\Repeater_TestUI.projitems*{2ed883f5-20db-4445-8c96-517a21e5e657}*SharedItemsImports = 13 dev\MenuFlyout\TestUI\MenuFlyout_TestUI.projitems*{2ef860e2-8766-41fc-bde2-e6b18bb8c206}*SharedItemsImports = 13 + dev\TabView\APITests\TabView_APITests.projitems*{2f4e95e9-f729-481c-b9aa-c9bec91ae395}*SharedItemsImports = 13 dev\ParallaxView\ParallaxView.vcxitems*{3095445a-afcd-5154-ac36-9770e6ec1aa5}*SharedItemsImports = 9 dev\InfoBar\TestUI\InfoBar_TestUI.projitems*{32dfaf1e-c2ec-4c52-a4d8-b3a3946242b4}*SharedItemsImports = 13 dev\RadioMenuFlyoutItem\RadioMenuFlyoutItem.vcxitems*{3353a4a7-87b3-4e43-8f8d-43c7380d1d56}*SharedItemsImports = 9 @@ -618,14 +621,10 @@ Global dev\Common\Common.vcxitems*{ad0c90b0-4845-4d4b-88f1-86f653f8171b}*SharedItemsImports = 4 dev\DropDownButton\DropDownButton.vcxitems*{ad0c90b0-4845-4d4b-88f1-86f653f8171b}*SharedItemsImports = 4 dev\Effects\Microsoft.UI.Composition.Effects.vcxitems*{ad0c90b0-4845-4d4b-88f1-86f653f8171b}*SharedItemsImports = 4 - dev\Expander\Expander.vcxitems*{ad0c90b0-4845-4d4b-88f1-86f653f8171b}*SharedItemsImports = 4 dev\IconSource\IconSource.vcxitems*{ad0c90b0-4845-4d4b-88f1-86f653f8171b}*SharedItemsImports = 4 - dev\InfoBar\InfoBar.vcxitems*{ad0c90b0-4845-4d4b-88f1-86f653f8171b}*SharedItemsImports = 4 dev\Lights\Lights.vcxitems*{ad0c90b0-4845-4d4b-88f1-86f653f8171b}*SharedItemsImports = 4 dev\Materials\Acrylic\AcrylicBrush.vcxitems*{ad0c90b0-4845-4d4b-88f1-86f653f8171b}*SharedItemsImports = 4 dev\Materials\Reveal\RevealBrush.vcxitems*{ad0c90b0-4845-4d4b-88f1-86f653f8171b}*SharedItemsImports = 4 - dev\NumberBox\NumberBox.vcxitems*{ad0c90b0-4845-4d4b-88f1-86f653f8171b}*SharedItemsImports = 4 - dev\Repeater\Repeater.vcxitems*{ad0c90b0-4845-4d4b-88f1-86f653f8171b}*SharedItemsImports = 4 dev\ResourceHelper\ResourceHelper.vcxitems*{ad0c90b0-4845-4d4b-88f1-86f653f8171b}*SharedItemsImports = 4 dev\SplitButton\SplitButton.vcxitems*{ad0c90b0-4845-4d4b-88f1-86f653f8171b}*SharedItemsImports = 4 dev\Telemetry\Telemetry.vcxitems*{ad0c90b0-4845-4d4b-88f1-86f653f8171b}*SharedItemsImports = 4 @@ -667,10 +666,6 @@ Global dev\TreeView\APITests\TreeView_APITests.projitems*{de885c66-929c-464e-bac4-3e076ec46483}*SharedItemsImports = 13 dev\Pivot\TestUI\Pivot_TestUI.projitems*{deb3fa60-e4a7-4735-89f2-363c7c56b428}*SharedItemsImports = 13 dev\CommonManaged\CommonManaged.projitems*{dedc1e4f-cfa5-4443-83eb-e79d425df7e7}*SharedItemsImports = 4 - dev\Expander\TestUI\Expander_TestUI.projitems*{dedc1e4f-cfa5-4443-83eb-e79d425df7e7}*SharedItemsImports = 4 - dev\InfoBar\TestUI\InfoBar_TestUI.projitems*{dedc1e4f-cfa5-4443-83eb-e79d425df7e7}*SharedItemsImports = 4 - dev\NumberBox\APITests\NumberBox_APITests.projitems*{dedc1e4f-cfa5-4443-83eb-e79d425df7e7}*SharedItemsImports = 4 - dev\NumberBox\TestUI\NumberBox_TestUI.projitems*{dedc1e4f-cfa5-4443-83eb-e79d425df7e7}*SharedItemsImports = 4 test\TestAppUtils\TestAppUtils.projitems*{dedc1e4f-cfa5-4443-83eb-e79d425df7e7}*SharedItemsImports = 4 dev\SplitButton\InteractionTests\SplitButton_InteractionTests.projitems*{e1c861e2-c4d9-41e1-aed7-5e203451bd4d}*SharedItemsImports = 13 dev\DatePicker\TestUI\DatePicker_TestUI.projitems*{e20f725c-3a53-463b-ada9-ff2088aaca4d}*SharedItemsImports = 13 @@ -688,10 +683,6 @@ Global dev\Materials\Acrylic\InteractionTests\AcrylicBrush_InteractionTests.projitems*{f601284a-00c1-49f9-99b3-70d45585f784}*SharedItemsImports = 13 dev\SplitButton\SplitButton.vcxitems*{faf114dd-af1f-4d9f-a511-354c19912aad}*SharedItemsImports = 9 dev\CommonManaged\CommonManaged.projitems*{fbc396f5-26dd-4ca3-981e-c7bc9fea4546}*SharedItemsImports = 4 - dev\Expander\TestUI\Expander_TestUI.projitems*{fbc396f5-26dd-4ca3-981e-c7bc9fea4546}*SharedItemsImports = 4 - dev\InfoBar\TestUI\InfoBar_TestUI.projitems*{fbc396f5-26dd-4ca3-981e-c7bc9fea4546}*SharedItemsImports = 4 - dev\NumberBox\APITests\NumberBox_APITests.projitems*{fbc396f5-26dd-4ca3-981e-c7bc9fea4546}*SharedItemsImports = 4 - dev\NumberBox\TestUI\NumberBox_TestUI.projitems*{fbc396f5-26dd-4ca3-981e-c7bc9fea4546}*SharedItemsImports = 4 test\TestAppUtils\TestAppUtils.projitems*{fbc396f5-26dd-4ca3-981e-c7bc9fea4546}*SharedItemsImports = 4 dev\Slider\Slider.vcxitems*{fc2178ca-7f72-40f0-916c-a2b3750bbb6c}*SharedItemsImports = 9 dev\LayoutPanel\LayoutPanel.vcxitems*{fd3c1a00-0d07-4849-a3b9-646f0ff21d7b}*SharedItemsImports = 9 @@ -1081,6 +1072,7 @@ Global {BA914F48-E924-4FD2-AEE1-264F67DB6C9F} = {807E57C8-F3E8-4049-AB88-BE3D3285B441} {B3E64837-A5E4-49CB-97FF-A365307B9191} = {67599AD5-51EC-44CB-85CE-B60CD8CBA270} {B9F81FEF-1E8D-4FE1-A46B-7002D4C109D2} = {B3E64837-A5E4-49CB-97FF-A365307B9191} + {2F4E95E9-F729-481C-B9AA-C9BEC91AE395} = {B3E64837-A5E4-49CB-97FF-A365307B9191} {D1E297B4-5E5B-4807-8624-4141C817A98A} = {B3E64837-A5E4-49CB-97FF-A365307B9191} {1D87AAC7-1E11-40FC-90A7-B6CE1C4567AE} = {B3E64837-A5E4-49CB-97FF-A365307B9191} {CFAFD6A7-FC7B-4C96-B292-A440C7C65D89} = {67599AD5-51EC-44CB-85CE-B60CD8CBA270} @@ -1139,19 +1131,15 @@ Global {990BBC65-1114-435D-B5CC-1EB8AAAD72DD} = {633B8D7A-3207-4BD3-8159-B65710AEA6FF} {128E6F7A-578C-48DC-BD3F-750EC662C268} = {633B8D7A-3207-4BD3-8159-B65710AEA6FF} {6F7831A4-48F8-41E8-A573-C567A1223CB5} = {05CB5DBD-A481-4DFF-B1A3-642F049D165C} - {93FAB536-1139-4FD1-B0BF-97C0C6FAB378} = {67599AD5-51EC-44CB-85CE-B60CD8CBA270} - {EC3B6F65-32C6-4BC8-8902-EE0B397E2787} = {93FAB536-1139-4FD1-B0BF-97C0C6FAB378} - {50C1F1D3-20AA-49A8-9E4C-CF4E5811A1D8} = {93FAB536-1139-4FD1-B0BF-97C0C6FAB378} - {D6DF4AB9-FACC-4E51-8C57-6B1F96919365} = {93FAB536-1139-4FD1-B0BF-97C0C6FAB378} {E7C2104F-770D-4375-8D3A-D173F222273A} = {67599AD5-51EC-44CB-85CE-B60CD8CBA270} {AB3261A7-9A8D-4A27-AEA2-3AAC0419C889} = {E7C2104F-770D-4375-8D3A-D173F222273A} {225C4174-3141-49B8-ADE2-C7D3408D5103} = {E7C2104F-770D-4375-8D3A-D173F222273A} {4F64C819-664F-436A-BCDB-8AB3019B9DD5} = {E7C2104F-770D-4375-8D3A-D173F222273A} {CB2352E2-D633-41A3-8CDC-B28731A4C490} = {E7C2104F-770D-4375-8D3A-D173F222273A} - {0EC260CC-03C7-4790-B16A-43428EBCF5AD} = {67599AD5-51EC-44CB-85CE-B60CD8CBA270} - {3566798E-9E24-44EF-B89D-2A62AE8F697A} = {0EC260CC-03C7-4790-B16A-43428EBCF5AD} - {675121BF-CABC-48E7-9C9D-4571BC507406} = {0EC260CC-03C7-4790-B16A-43428EBCF5AD} - {675373CE-6ACD-4C4B-A009-09A3C9B218E6} = {0EC260CC-03C7-4790-B16A-43428EBCF5AD} + {93FAB536-1139-4FD1-B0BF-97C0C6FAB378} = {67599AD5-51EC-44CB-85CE-B60CD8CBA270} + {EC3B6F65-32C6-4BC8-8902-EE0B397E2787} = {93FAB536-1139-4FD1-B0BF-97C0C6FAB378} + {50C1F1D3-20AA-49A8-9E4C-CF4E5811A1D8} = {93FAB536-1139-4FD1-B0BF-97C0C6FAB378} + {D6DF4AB9-FACC-4E51-8C57-6B1F96919365} = {93FAB536-1139-4FD1-B0BF-97C0C6FAB378} {1AD0CB4F-47F0-432B-8D4F-CE33FA3EB8A9} = {67599AD5-51EC-44CB-85CE-B60CD8CBA270} {CCC102B7-F5EF-479D-94F1-008D189448B1} = {1AD0CB4F-47F0-432B-8D4F-CE33FA3EB8A9} {F470A64E-780E-45AA-ABB7-73A8734E51D7} = {1AD0CB4F-47F0-432B-8D4F-CE33FA3EB8A9} @@ -1160,4 +1148,4 @@ Global GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D93836AB-52D3-4DE2-AE25-23F26F55ECED} EndGlobalSection -EndGlobal \ No newline at end of file +EndGlobal diff --git a/build/AzurePipelinesTemplates/MUX-NugetReleaseTest-Job.yml b/build/AzurePipelinesTemplates/MUX-NugetReleaseTest-Job.yml index 0d1bb8e2e0..406491485b 100644 --- a/build/AzurePipelinesTemplates/MUX-NugetReleaseTest-Job.yml +++ b/build/AzurePipelinesTemplates/MUX-NugetReleaseTest-Job.yml @@ -43,7 +43,7 @@ jobs: nugetConfigPath: test\MUXControlsReleaseTest\nuget.config packageSaveDirectory: $(Build.SourcesDirectory)\packages\muxreleasetest artifactDownloadPath: $(Build.SourcesDirectory)\Artifacts - currentPackageVersion: 2.1.190606001 + currentPackageVersion: 2.4.3 buildOutputDir: $(Build.SourcesDirectory)\BuildOutput steps: diff --git a/dev/CommonStyles/CommonStyles.vcxitems b/dev/CommonStyles/CommonStyles.vcxitems index fca4fc351e..074d796b71 100644 --- a/dev/CommonStyles/CommonStyles.vcxitems +++ b/dev/CommonStyles/CommonStyles.vcxitems @@ -19,6 +19,10 @@ ThemeResources 1 + + RS1 + ThemeResources + RS1 ThemeResources diff --git a/dev/CommonStyles/Deprecated_themeresources.xaml b/dev/CommonStyles/Deprecated_themeresources.xaml new file mode 100644 index 0000000000..80a70b9fdd --- /dev/null +++ b/dev/CommonStyles/Deprecated_themeresources.xaml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/TabView/APITests/TabViewTests.cs b/dev/TabView/APITests/TabViewTests.cs index 2c0488f9c0..882d8cd1f1 100644 --- a/dev/TabView/APITests/TabViewTests.cs +++ b/dev/TabView/APITests/TabViewTests.cs @@ -13,6 +13,7 @@ using Windows.UI.Xaml.Automation.Peers; using Windows.UI.Xaml.Automation; using Windows.UI.Xaml.Automation.Provider; +using Windows.UI.Xaml.Controls; using System.Collections.ObjectModel; using Microsoft.UI.Xaml.Controls.Primitives; @@ -180,32 +181,32 @@ public void VerifyTabViewItemUIABehavior() IdleSynchronizer.Wait(); - RunOnUIThread.Execute(() => - { - var selectionItemProvider = GetProviderFromTVI(tvi0); - Verify.IsTrue(selectionItemProvider.IsSelected, "Item should be selected"); + //RunOnUIThread.Execute(() => + //{ + // var selectionItemProvider = GetProviderFromTVI(tvi0); + // Verify.IsTrue(selectionItemProvider.IsSelected, "Item should be selected"); - selectionItemProvider = GetProviderFromTVI(tvi1); - Verify.IsFalse(selectionItemProvider.IsSelected, "Item should not be selected"); + // selectionItemProvider = GetProviderFromTVI(tvi1); + // Verify.IsFalse(selectionItemProvider.IsSelected, "Item should not be selected"); - Log.Comment("Change selection through automationpeer"); - selectionItemProvider.Select(); - Verify.IsTrue(selectionItemProvider.IsSelected, "Item should have been selected"); + // Log.Comment("Change selection through automationpeer"); + // selectionItemProvider.Select(); + // Verify.IsTrue(selectionItemProvider.IsSelected, "Item should have been selected"); - selectionItemProvider = GetProviderFromTVI(tvi0); - Verify.IsFalse(selectionItemProvider.IsSelected, "Item should not be selected anymore"); + // selectionItemProvider = GetProviderFromTVI(tvi0); + // Verify.IsFalse(selectionItemProvider.IsSelected, "Item should not be selected anymore"); - Verify.IsNotNull(selectionItemProvider.SelectionContainer); - }); + // Verify.IsNotNull(selectionItemProvider.SelectionContainer); + //}); - static ISelectionItemProvider GetProviderFromTVI(TabViewItem item) - { - var peer = FrameworkElementAutomationPeer.CreatePeerForElement(item); - var provider = peer.GetPattern(PatternInterface.SelectionItem) - as ISelectionItemProvider; - Verify.IsNotNull(provider); - return provider; - } + //static ISelectionItemProvider GetProviderFromTVI(TabViewItem item) + //{ + // var peer = FrameworkElementAutomationPeer.CreatePeerForElement(item); + // var provider = peer.GetPattern(PatternInterface.SelectionItem) + // as ISelectionItemProvider; + // Verify.IsNotNull(provider); + // return provider; + //} } [TestMethod] @@ -228,6 +229,113 @@ public void VerifyTabViewWithoutTabsDoesNotCrash() }); } + [TestMethod] + public void TabViewItemBackgroundTest() + { + TabView tabView = null; + TabViewItem tabViewItem1 = null; + TabViewItem tabViewItem2 = null; + RunOnUIThread.Execute(() => + { + tabView = new TabView(); + + tabViewItem1 = CreateTabViewItem("Tab1", Symbol.Home); + tabViewItem2 = CreateTabViewItem("Tab2", Symbol.Document); + + tabView.TabItems.Add(tabViewItem1); + tabView.TabItems.Add(tabViewItem2); + + Content = tabView; + }); + + IdleSynchronizer.Wait(); + + RunOnUIThread.Execute(() => + { + // Verify that the TabViewItem we use for background API testing here is unselected + Verify.IsFalse(tabViewItem2.IsSelected, "TabViewItem should have been unselected"); + + bool testCondition = !IsBrushUsingSolidColor(tabViewItem2.Background, Colors.Blue); + Verify.IsTrue(testCondition, "Default TabViewItem background color should have not been [blue]"); + + var tabContainer = VisualTreeUtils.FindVisualChildByName(tabViewItem2, "TabContainer") as Grid; + + testCondition = !IsBrushUsingSolidColor(tabContainer.Background, Colors.Blue); + Verify.IsTrue(testCondition, "TabViewItem's [TabContainer] background color should have not been [blue]"); + + Log.Comment("Set the background color of the TabViewItem to [blue]"); + tabViewItem2.Background = new SolidColorBrush(Colors.Blue); + + testCondition = IsBrushUsingSolidColor(tabViewItem2.Background, Colors.Blue); + Verify.IsTrue(testCondition, "TabViewItem's background color should have been [blue]"); + + testCondition = IsBrushUsingSolidColor(tabContainer.Background, Colors.Blue); + Verify.IsTrue(testCondition, "TabViewItem's [TabContainer] background color should have been [blue]"); + + bool IsBrushUsingSolidColor(Brush brush, Color color) + { + return brush is SolidColorBrush scBrush && scBrush.Color == color; + } + }); + } + + [TestMethod] + public void TabViewItemForegroundTest() + { + TabView tabView = null; + TabViewItem tabViewItem1 = null; + TabViewItem tabViewItem2 = null; + RunOnUIThread.Execute(() => + { + tabView = new TabView(); + + tabViewItem1 = CreateTabViewItem("Tab1", Symbol.Home); + tabViewItem2 = CreateTabViewItem("Tab2", Symbol.Document); + + tabView.TabItems.Add(tabViewItem1); + tabView.TabItems.Add(tabViewItem2); + + Content = tabView; + }); + + IdleSynchronizer.Wait(); + + RunOnUIThread.Execute(() => + { + // Verify that the TabViewItem we use for foreground API testing here is unselected + Verify.IsFalse(tabViewItem2.IsSelected, "TabViewItem should have been unselected"); + + bool testCondition = !IsBrushUsingSolidColor(tabViewItem2.Foreground, Colors.Blue); + Verify.IsTrue(testCondition, "Default TabViewItem foreground color should have not been [blue]"); + + var iconControl = VisualTreeUtils.FindVisualChildByName(tabViewItem2, "IconControl") as ContentControl; + var headerPresenter = VisualTreeUtils.FindVisualChildByName(tabViewItem2, "ContentPresenter") as ContentPresenter; + + testCondition = !IsBrushUsingSolidColor(iconControl.Foreground, Colors.Blue); + Verify.IsTrue(testCondition, "TabViewItem's [IconControl] foreground color should have not been [blue]"); + + testCondition = !IsBrushUsingSolidColor(headerPresenter.Foreground, Colors.Blue); + Verify.IsTrue(testCondition, "TabViewItem's [ContentPresenter] foreground color should have not been [blue]"); + + Log.Comment("Set the foreground color of the TabViewItem to [blue]"); + tabViewItem2.Foreground = new SolidColorBrush(Colors.Blue); + + testCondition = IsBrushUsingSolidColor(tabViewItem2.Foreground, Colors.Blue); + Verify.IsTrue(testCondition, "TabViewItem's foreground color should have been [blue]"); + + testCondition = IsBrushUsingSolidColor(iconControl.Foreground, Colors.Blue); + Verify.IsTrue(testCondition, "TabViewItem's [IconControl] foreground color should have been [blue]"); + + testCondition = IsBrushUsingSolidColor(headerPresenter.Foreground, Colors.Blue); + Verify.IsTrue(testCondition, "TabViewItem's [ContentPresenter] foreground color should have been [blue]"); + + bool IsBrushUsingSolidColor(Brush brush, Color color) + { + return brush is SolidColorBrush scBrush && scBrush.Color == color; + } + }); + } + private static void VerifyTabWidthVisualStates(TabView tabView, IList items, bool isCompact) { var listView = VisualTreeUtils.FindVisualChildByName(tabView, "TabListView") as TabViewListView; diff --git a/dev/TabView/TabView.xaml b/dev/TabView/TabView.xaml index 97591f97a6..9f283e9f6b 100644 --- a/dev/TabView/TabView.xaml +++ b/dev/TabView/TabView.xaml @@ -376,6 +376,8 @@