{"id":18937420,"url":"https://github.com/verifytests/verify.xaml","last_synced_at":"2025-08-02T19:09:08.796Z","repository":{"id":37269306,"uuid":"239094644","full_name":"VerifyTests/Verify.Xaml","owner":"VerifyTests","description":"Extends Verify to allow verification of Xaml UIs","archived":false,"fork":false,"pushed_at":"2025-07-10T00:28:54.000Z","size":815,"stargazers_count":21,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-10T10:08:27.182Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VerifyTests.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"license.txt","code_of_conduct":"code_of_conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"VerifyTests"}},"created_at":"2020-02-08T08:38:34.000Z","updated_at":"2025-07-10T00:28:58.000Z","dependencies_parsed_at":"2024-01-10T03:29:53.121Z","dependency_job_id":"0c9db018-1b80-495d-85ec-095f01f56de4","html_url":"https://github.com/VerifyTests/Verify.Xaml","commit_stats":{"total_commits":745,"total_committers":4,"mean_commits":186.25,"dds":0.5973154362416108,"last_synced_commit":"511617745dd40080b0f6b50fb1325719f703186e"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/VerifyTests/Verify.Xaml","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VerifyTests%2FVerify.Xaml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VerifyTests%2FVerify.Xaml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VerifyTests%2FVerify.Xaml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VerifyTests%2FVerify.Xaml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VerifyTests","download_url":"https://codeload.github.com/VerifyTests/Verify.Xaml/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VerifyTests%2FVerify.Xaml/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268439598,"owners_count":24250671,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T12:11:06.607Z","updated_at":"2025-08-02T19:09:08.778Z","avatar_url":"https://github.com/VerifyTests.png","language":"C#","funding_links":["https://github.com/sponsors/VerifyTests"],"categories":[],"sub_categories":[],"readme":"# \u003cimg src=\"/src/icon.png\" height=\"30px\"\u003e Verify.Xaml\n\n[![Discussions](https://img.shields.io/badge/Verify-Discussions-yellow?svg=true\u0026label=)](https://github.com/orgs/VerifyTests/discussions)\n[![Build status](https://ci.appveyor.com/api/projects/status/o2iy3b7k9le0ntps?svg=true)](https://ci.appveyor.com/project/SimonCropp/verify-xaml)\n[![NuGet Status](https://img.shields.io/nuget/v/Verify.Xaml.svg)](https://www.nuget.org/packages/Verify.Xaml/)\n\nExtends [Verify](https://github.com/VerifyTests/Verify) to allow verification of Xaml UIs.\u003c!-- singleLineInclude: intro. path: /docs/intro.include.md --\u003e\n\n**See [Milestones](../../milestones?state=closed) for release notes.**\n\n\n## NuGet\n\n * https://nuget.org/packages/Verify.Xaml\n\n\n## Usage\n\n\u003c!-- snippet: Enable --\u003e\n\u003ca id='snippet-Enable'\u003e\u003c/a\u003e\n```cs\n[ModuleInitializer]\npublic static void Init() =\u003e\n    VerifyXaml.Initialize();\n```\n\u003csup\u003e\u003ca href='/src/Tests/ModuleInit.cs#L3-L9' title='Snippet source file'\u003esnippet source\u003c/a\u003e | \u003ca href='#snippet-Enable' title='Start of snippet'\u003eanchor\u003c/a\u003e\u003c/sup\u003e\n\u003c!-- endSnippet --\u003e\n\nA visual element (Window/Page/Control etc) can then be verified as follows:\n\n\u003c!-- snippet: Window --\u003e\n\u003ca id='snippet-Window'\u003e\u003c/a\u003e\n```cs\n[Test]\npublic async Task WindowUsage()\n{\n    var window = new MyWindow();\n    await Verify(window);\n}\n```\n\u003csup\u003e\u003ca href='/src/Tests/TheTests.cs#L7-L16' title='Snippet source file'\u003esnippet source\u003c/a\u003e | \u003ca href='#snippet-Window' title='Start of snippet'\u003eanchor\u003c/a\u003e\u003c/sup\u003e\n\u003c!-- endSnippet --\u003e\n\nWith the state of the element being rendered as a verified files:\n\n[TheTests.WindowUsage.verified.xml](/src/Tests/TheTests.WindowUsage.verified.xml):\n\n\u003c!-- snippet: TheTests.WindowUsage.verified.xml --\u003e\n\u003ca id='snippet-TheTests.WindowUsage.verified.xml'\u003e\u003c/a\u003e\n```xml\n\u003cMyWindow\n  Title=\"MyWindow\"\n  Width=\"525\"\n  Height=\"350\"\n  xmlns=\"clr-namespace:Tests;assembly=Tests\"\n  xmlns:av=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\u003e\n  \u003cav:DockPanel\n    Name=\"MyPanel\"\u003e\n    \u003cav:Menu\n      Height=\"26\"\n      av:DockPanel.Dock=\"Top\"\u003e\n      \u003cav:MenuItem\n        Header=\"File\"\u003e\n        \u003cav:MenuItem\n          Header=\"Exit\" /\u003e\n      \u003c/av:MenuItem\u003e\n      \u003cav:MenuItem\n        Header=\"View\"\u003e\n        \u003cav:MenuItem\n          IsCheckable=\"True\"\n          IsChecked=\"True\"\n          Header=\"Standard\"\n          Name=\"StandardMenu\" /\u003e\n      \u003c/av:MenuItem\u003e\n      \u003cav:MenuItem\n        Header=\"Help\"\u003e\n        \u003cav:MenuItem\n          Header=\"About\" /\u003e\n      \u003c/av:MenuItem\u003e\n    \u003c/av:Menu\u003e\n    \u003cav:Grid\n      ShowGridLines=\"False\"\n      Name=\"MyGrid\"\u003e\n      \u003cav:Grid.ColumnDefinitions\u003e\n        \u003cav:ColumnDefinition /\u003e\n        \u003cav:ColumnDefinition /\u003e\n        \u003cav:ColumnDefinition /\u003e\n        \u003cav:ColumnDefinition /\u003e\n        \u003cav:ColumnDefinition /\u003e\n        \u003cav:ColumnDefinition /\u003e\n        \u003cav:ColumnDefinition /\u003e\n        \u003cav:ColumnDefinition /\u003e\n        \u003cav:ColumnDefinition /\u003e\n      \u003c/av:Grid.ColumnDefinitions\u003e\n      \u003cav:Grid.RowDefinitions\u003e\n        \u003cav:RowDefinition /\u003e\n        \u003cav:RowDefinition /\u003e\n        \u003cav:RowDefinition /\u003e\n        \u003cav:RowDefinition /\u003e\n        \u003cav:RowDefinition /\u003e\n        \u003cav:RowDefinition /\u003e\n      \u003c/av:Grid.RowDefinitions\u003e\n      \u003cav:Button\n        Name=\"B7\"\n        av:Grid.Column=\"4\"\n        av:Grid.Row=\"2\"\u003e7\u003c/av:Button\u003e\n      \u003cav:Button\n        Name=\"B8\"\n        av:Grid.Column=\"5\"\n        av:Grid.Row=\"2\"\u003e8\u003c/av:Button\u003e\n      \u003cav:Button\n        Name=\"B9\"\n        av:Grid.Column=\"6\"\n        av:Grid.Row=\"2\"\u003e9\u003c/av:Button\u003e\n      \u003cav:Button\n        Name=\"B4\"\n        av:Grid.Column=\"4\"\n        av:Grid.Row=\"3\"\u003e4\u003c/av:Button\u003e\n      \u003cav:Button\n        Name=\"B5\"\n        av:Grid.Column=\"5\"\n        av:Grid.Row=\"3\"\u003e5\u003c/av:Button\u003e\n      \u003cav:Button\n        Name=\"B6\"\n        av:Grid.Column=\"6\"\n        av:Grid.Row=\"3\"\u003e6\u003c/av:Button\u003e\n      \u003cav:Button\n        Name=\"B1\"\n        av:Grid.Column=\"4\"\n        av:Grid.Row=\"4\"\u003e1\u003c/av:Button\u003e\n      \u003cav:Button\n        Name=\"B2\"\n        av:Grid.Column=\"5\"\n        av:Grid.Row=\"4\"\u003e2\u003c/av:Button\u003e\n      \u003cav:Button\n        Name=\"B3\"\n        av:Grid.Column=\"6\"\n        av:Grid.Row=\"4\"\u003e3\u003c/av:Button\u003e\n      \u003cav:Button\n        Name=\"B0\"\n        av:Grid.Column=\"4\"\n        av:Grid.Row=\"5\"\u003e0\u003c/av:Button\u003e\n      \u003cav:Button\n        Name=\"BPeriod\"\n        av:Grid.Column=\"5\"\n        av:Grid.Row=\"5\"\u003e.\u003c/av:Button\u003e\n      \u003cav:Button\n        Background=\"#FFA9A9A9\"\n        Name=\"BPM\"\n        av:Grid.Column=\"6\"\n        av:Grid.Row=\"5\"\u003e+/-\u003c/av:Button\u003e\n      \u003cav:Button\n        Background=\"#FFA9A9A9\"\n        Name=\"BDevide\"\n        av:Grid.Column=\"7\"\n        av:Grid.Row=\"2\"\u003e/\u003c/av:Button\u003e\n      \u003cav:Button\n        Background=\"#FFA9A9A9\"\n        Name=\"BMultiply\"\n        av:Grid.Column=\"7\"\n        av:Grid.Row=\"3\"\u003e*\u003c/av:Button\u003e\n      \u003cav:Button\n        Background=\"#FFA9A9A9\"\n        Name=\"BMinus\"\n        av:Grid.Column=\"7\"\n        av:Grid.Row=\"4\"\u003e-\u003c/av:Button\u003e\n      \u003cav:Button\n        Background=\"#FFA9A9A9\"\n        Name=\"BPlus\"\n        av:Grid.Column=\"7\"\n        av:Grid.Row=\"5\"\u003e+\u003c/av:Button\u003e\n      \u003cav:Button\n        Background=\"#FFA9A9A9\"\n        Name=\"BSqrt\"\n        ToolTip=\"Usage: 'A Sqrt'\"\n        av:Grid.Column=\"8\"\n        av:Grid.Row=\"2\"\u003eSqrt\u003c/av:Button\u003e\n      \u003cav:Button\n        Background=\"#FFA9A9A9\"\n        Name=\"BPercent\"\n        ToolTip=\"Usage: 'A % B ='\"\n        av:Grid.Column=\"8\"\n        av:Grid.Row=\"3\"\u003e%\u003c/av:Button\u003e\n      \u003cav:Button\n        Background=\"#FFA9A9A9\"\n        Name=\"BOneOver\"\n        ToolTip=\"Usage: 'A 1/X'\"\n        av:Grid.Column=\"8\"\n        av:Grid.Row=\"4\"\u003e1/X\u003c/av:Button\u003e\n      \u003cav:Button\n        Background=\"#FFA9A9A9\"\n        Name=\"BEqual\"\n        av:Grid.Column=\"8\"\n        av:Grid.Row=\"5\"\u003e=\u003c/av:Button\u003e\n      \u003cav:Button\n        Background=\"#FFA9A9A9\"\n        Name=\"BC\"\n        ToolTip=\"Clear All\"\n        av:Grid.Column=\"8\"\n        av:Grid.Row=\"1\"\u003eC\u003c/av:Button\u003e\n      \u003cav:Button\n        Background=\"#FFA9A9A9\"\n        Name=\"BCE\"\n        ToolTip=\"Clear Current Entry\"\n        av:Grid.Column=\"7\"\n        av:Grid.Row=\"1\"\u003eCE\u003c/av:Button\u003e\n      \u003cav:Button\n        Background=\"#FFA9A9A9\"\n        Name=\"BMemClear\"\n        ToolTip=\"Clear Memory\"\n        av:Grid.Column=\"3\"\n        av:Grid.Row=\"2\"\u003eMC\u003c/av:Button\u003e\n      \u003cav:Button\n        Background=\"#FFA9A9A9\"\n        Name=\"BMemRecall\"\n        ToolTip=\"Recall Memory\"\n        av:Grid.Column=\"3\"\n        av:Grid.Row=\"3\"\u003eMR\u003c/av:Button\u003e\n      \u003cav:Button\n        Background=\"#FFA9A9A9\"\n        Name=\"BMemSave\"\n        ToolTip=\"Store in Memory\"\n        av:Grid.Column=\"3\"\n        av:Grid.Row=\"4\"\u003eMS\u003c/av:Button\u003e\n      \u003cav:Button\n        Background=\"#FFA9A9A9\"\n        Name=\"BMemPlus\"\n        ToolTip=\"Add To Memory\"\n        av:Grid.Column=\"3\"\n        av:Grid.Row=\"5\"\u003eM+\u003c/av:Button\u003e\n      \u003cav:TextBlock\n        Text=\"Memory: [empty]\"\n        Name=\"BMemBox\"\n        Margin=\"10,17,10,17\"\n        av:Grid.Column=\"3\"\n        av:Grid.Row=\"1\"\n        av:Grid.ColumnSpan=\"2\" /\u003e\n      \u003cav:TextBox\n        Name=\"DisplayBox\"\n        Height=\"30\"\n        Margin=\"5,5,5,5\"\n        av:Grid.ColumnSpan=\"9\"\n        xml:space=\"preserve\"\u003e\u003c/av:TextBox\u003e\n      \u003cav:TextBox\n        Name=\"PaperBox\"\n        Margin=\"5,5,5,5\"\n        av:Grid.Row=\"1\"\n        av:Grid.ColumnSpan=\"3\"\n        av:Grid.RowSpan=\"5\"\n        xml:space=\"preserve\"\u003e\u003c/av:TextBox\u003e\n    \u003c/av:Grid\u003e\n  \u003c/av:DockPanel\u003e\n\u003c/MyWindow\u003e\n```\n\u003csup\u003e\u003ca href='/src/Tests/TheTests.WindowUsage.verified.xml#L1-L203' title='Snippet source file'\u003esnippet source\u003c/a\u003e | \u003ca href='#snippet-TheTests.WindowUsage.verified.xml' title='Start of snippet'\u003eanchor\u003c/a\u003e\u003c/sup\u003e\n\u003c!-- endSnippet --\u003e\n\n[TheTests.WindowUsage.verified.png](/src/Tests/TheTests.WindowUsage.verified.png):\n\n\u003cimg src=\"/src/Tests/TheTests.WindowUsage.verified.png\" width=\"200px\"\u003e\n\n\n## OS specific rendering\n\nThe rendering of XAML elements can very slightly between different OS versions. This can make verification on different machines (eg CI) problematic. There are several approaches to mitigate this:\n\n * [Forcing elements to use a specific theme](https://arbel.net/2006/11/03/forcing-wpf-to-use-a-specific-windows-theme/)\n * Using a [custom comparer](https://github.com/VerifyTests/Verify/blob/master/docs/comparer.md)\n\n\n## Icon\n\n[Gem](https://thenounproject.com/term/gem/2247823/) designed by [Adnen Kadri](https://thenounproject.com/adnen.kadri/) from [The Noun Project](https://thenounproject.com).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverifytests%2Fverify.xaml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fverifytests%2Fverify.xaml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverifytests%2Fverify.xaml/lists"}