diff --git a/Radzen.Blazor.Tests/AutoCompleteTests.cs b/Radzen.Blazor.Tests/AutoCompleteTests.cs index dbc80657e..fa178c266 100644 --- a/Radzen.Blazor.Tests/AutoCompleteTests.cs +++ b/Radzen.Blazor.Tests/AutoCompleteTests.cs @@ -1,9 +1,74 @@ -using Xunit; +using Bunit; +using Xunit; +using System.Collections.Generic; namespace Radzen.Blazor.Tests { public class AutoCompleteTests { + [Fact] + public void AutoComplete_Renders_WithClassName() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent(); + + Assert.Contains(@"rz-autocomplete", component.Markup); + } + + [Fact] + public void AutoComplete_Renders_InputElement() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent(); + + Assert.Contains("type=\"text\"", component.Markup); + Assert.Contains("rz-inputtext", component.Markup); + } + + [Fact] + public void AutoComplete_Renders_Disabled() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent(parameters => + { + parameters.Add(p => p.Disabled, true); + }); + + Assert.Contains("disabled", component.Markup); + Assert.Contains("rz-state-disabled", component.Markup); + } + + [Fact] + public void AutoComplete_Renders_Placeholder() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent(parameters => + { + parameters.Add(p => p.Placeholder, "Type to search..."); + }); + + Assert.Contains("placeholder=\"Type to search...\"", component.Markup); + } + + [Fact] + public void AutoComplete_Renders_WithData() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var data = new List { "Apple", "Banana", "Cherry" }; + + var component = ctx.RenderComponent(parameters => + { + parameters.Add(p => p.Data, data); + }); + + Assert.Contains("rz-autocomplete-panel", component.Markup); + } + [Fact] public void AutoComplete_Enum_Converts_To_Attr_Value() { diff --git a/Radzen.Blazor.Tests/CheckBoxListTests.cs b/Radzen.Blazor.Tests/CheckBoxListTests.cs new file mode 100644 index 000000000..9a97ef727 --- /dev/null +++ b/Radzen.Blazor.Tests/CheckBoxListTests.cs @@ -0,0 +1,168 @@ +using Bunit; +using Xunit; +using System.Collections.Generic; + +namespace Radzen.Blazor.Tests +{ + public class CheckBoxListTests + { + class Item + { + public int Id { get; set; } + public string Name { get; set; } + public bool Disabled { get; set; } + } + + [Fact] + public void CheckBoxList_Renders_WithClassName() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent>(); + + Assert.Contains(@"rz-checkbox-list", component.Markup); + } + + [Fact] + public void CheckBoxList_Renders_WithData() + { + using var ctx = new TestContext(); + var data = new List { "Option 1", "Option 2", "Option 3" }; + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Data, data); + }); + + Assert.Contains("Option 1", component.Markup); + Assert.Contains("Option 2", component.Markup); + Assert.Contains("Option 3", component.Markup); + } + + [Fact] + public void CheckBoxList_Renders_WithCustomTextValueProperties() + { + using var ctx = new TestContext(); + var data = new List + { + new Item { Id = 1, Name = "First" }, + new Item { Id = 2, Name = "Second" } + }; + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Data, data); + parameters.Add(p => p.TextProperty, "Name"); + parameters.Add(p => p.ValueProperty, "Id"); + }); + + Assert.Contains("First", component.Markup); + Assert.Contains("Second", component.Markup); + } + + [Fact] + public void CheckBoxList_Renders_Orientation_Horizontal() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Orientation, Orientation.Horizontal); + }); + + Assert.Contains("rz-flex-row", component.Markup); + } + + [Fact] + public void CheckBoxList_Renders_Orientation_Vertical() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Orientation, Orientation.Vertical); + }); + + Assert.Contains("rz-flex-column", component.Markup); + } + + [Fact] + public void CheckBoxList_Renders_Disabled() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Disabled, true); + }); + + Assert.Contains("disabled", component.Markup); + Assert.Contains("rz-state-disabled", component.Markup); + } + + [Fact] + public void CheckBoxList_Renders_AllowSelectAll() + { + using var ctx = new TestContext(); + var data = new List { "Option 1", "Option 2" }; + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.AllowSelectAll, true); + parameters.Add(p => p.Data, data); + }); + + Assert.Contains("rz-multiselect-header", component.Markup); + } + + [Fact] + public void CheckBoxList_Renders_SelectAllText() + { + using var ctx = new TestContext(); + var data = new List { "Option 1", "Option 2" }; + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.AllowSelectAll, true); + parameters.Add(p => p.SelectAllText, "Select All Options"); + parameters.Add(p => p.Data, data); + }); + + Assert.Contains("Select All Options", component.Markup); + } + + [Fact] + public void CheckBoxList_Renders_CheckboxInputs() + { + using var ctx = new TestContext(); + var data = new List { "Option 1", "Option 2" }; + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Data, data); + }); + + Assert.Contains("type=\"checkbox\"", component.Markup); + Assert.Contains("rz-chkbox", component.Markup); + } + + [Fact] + public void CheckBoxList_Renders_DisabledItems() + { + using var ctx = new TestContext(); + var data = new List + { + new Item { Id = 1, Name = "Enabled", Disabled = false }, + new Item { Id = 2, Name = "Disabled", Disabled = true } + }; + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Data, data); + parameters.Add(p => p.TextProperty, "Name"); + parameters.Add(p => p.ValueProperty, "Id"); + parameters.Add(p => p.DisabledProperty, "Disabled"); + }); + + Assert.Contains("Enabled", component.Markup); + Assert.Contains("Disabled", component.Markup); + } + } +} + diff --git a/Radzen.Blazor.Tests/DropDownDataGridTests.cs b/Radzen.Blazor.Tests/DropDownDataGridTests.cs new file mode 100644 index 000000000..a04224068 --- /dev/null +++ b/Radzen.Blazor.Tests/DropDownDataGridTests.cs @@ -0,0 +1,148 @@ +using Bunit; +using Xunit; +using System.Collections.Generic; + +namespace Radzen.Blazor.Tests +{ + public class DropDownDataGridTests + { + class Customer + { + public int Id { get; set; } + public string CompanyName { get; set; } + public string ContactName { get; set; } + } + + [Fact] + public void DropDownDataGrid_Renders_WithClassName() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(); + + Assert.Contains(@"rz-dropdown", component.Markup); + } + + [Fact] + public void DropDownDataGrid_Renders_DropdownTrigger() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(); + + Assert.Contains("rz-dropdown-trigger", component.Markup); + Assert.Contains("rzi-chevron-down", component.Markup); + } + + [Fact] + public void DropDownDataGrid_Renders_WithData() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var data = new List { "Item1", "Item2", "Item3" }; + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Data, data); + }); + + Assert.Contains("rz-lookup-panel", component.Markup); + } + + [Fact] + public void DropDownDataGrid_Renders_WithCustomTextProperty() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var data = new List + { + new Customer { Id = 1, CompanyName = "Acme Corp" } + }; + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Data, data); + parameters.Add(p => p.TextProperty, "CompanyName"); + parameters.Add(p => p.ValueProperty, "Id"); + }); + + Assert.Contains("rz-lookup-panel", component.Markup); + } + + [Fact] + public void DropDownDataGrid_Renders_AllowFiltering() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var data = new List { "Item1", "Item2" }; + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.AllowFiltering, true); + parameters.Add(p => p.Data, data); + }); + + Assert.Contains("rz-lookup-search", component.Markup); + } + + [Fact] + public void DropDownDataGrid_Renders_Placeholder() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Placeholder, "Select an item"); + }); + + Assert.Contains("Select an item", component.Markup); + Assert.Contains("rz-placeholder", component.Markup); + } + + [Fact] + public void DropDownDataGrid_Renders_AllowClear() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var data = new List { "Item1" }; + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.AllowClear, true); + parameters.Add(p => p.Data, data); + parameters.Add(p => p.Value, "Item1"); + }); + + Assert.Contains("rz-dropdown-clear-icon", component.Markup); + } + + [Fact] + public void DropDownDataGrid_Renders_Disabled() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Disabled, true); + }); + + Assert.Contains("disabled", component.Markup); + Assert.Contains("rz-state-disabled", component.Markup); + } + + [Fact] + public void DropDownDataGrid_Renders_Multiple_WithChips() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>>(parameters => + { + parameters.Add(p => p.Multiple, true); + parameters.Add(p => p.Chips, true); + }); + + Assert.Contains("rz-multiselect-panel", component.Markup); + } + } +} + diff --git a/Radzen.Blazor.Tests/DropDownTests.cs b/Radzen.Blazor.Tests/DropDownTests.cs index a5f1fc962..1dfabd642 100644 --- a/Radzen.Blazor.Tests/DropDownTests.cs +++ b/Radzen.Blazor.Tests/DropDownTests.cs @@ -686,5 +686,58 @@ namespace Radzen.Blazor.Tests public IEnumerator GetEnumerator() => _items.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); } + + [Fact] + public void DropDown_Renders_Placeholder() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Placeholder, "Select an option"); + }); + + Assert.Contains("Select an option", component.Markup); + Assert.Contains("rz-placeholder", component.Markup); + } + + [Fact] + public void DropDown_Renders_AllowClear_WithValue() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var data = new[] { new DataItem { Text = "Item 1", Id = 1 } }; + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.AllowClear, true); + parameters.Add(p => p.Data, data); + parameters.Add(p => p.TextProperty, nameof(DataItem.Text)); + parameters.Add(p => p.ValueProperty, nameof(DataItem.Id)); + parameters.Add(p => p.Value, 1); + }); + + Assert.Contains("rz-dropdown-clear-icon", component.Markup); + } + + [Fact] + public void DropDown_DoesNotRender_AllowClear_WhenNotAllowed() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var data = new[] { new DataItem { Text = "Item 1", Id = 1 } }; + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.AllowClear, false); + parameters.Add(p => p.Data, data); + parameters.Add(p => p.TextProperty, nameof(DataItem.Text)); + parameters.Add(p => p.ValueProperty, nameof(DataItem.Id)); + parameters.Add(p => p.Value, 1); + }); + + Assert.DoesNotContain("rz-dropdown-clear-icon", component.Markup); + } } } diff --git a/Radzen.Blazor.Tests/FileInputTests.cs b/Radzen.Blazor.Tests/FileInputTests.cs new file mode 100644 index 000000000..444cf8d34 --- /dev/null +++ b/Radzen.Blazor.Tests/FileInputTests.cs @@ -0,0 +1,182 @@ +using Bunit; +using Xunit; + +namespace Radzen.Blazor.Tests +{ + public class FileInputTests + { + [Fact] + public void FileInput_Renders_WithClassName() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(); + + Assert.Contains(@"rz-fileupload", component.Markup); + } + + [Fact] + public void FileInput_Renders_ChooseButton() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(); + + Assert.Contains("rz-fileupload-choose", component.Markup); + Assert.Contains("rz-button", component.Markup); + } + + [Fact] + public void FileInput_Renders_ChooseText() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.ChooseText, "Select File"); + }); + + Assert.Contains("Select File", component.Markup); + } + + [Fact] + public void FileInput_Renders_DefaultChooseText() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(); + + Assert.Contains("Choose", component.Markup); + } + + [Fact] + public void FileInput_Renders_Disabled() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Disabled, true); + }); + + Assert.Contains("rz-state-disabled", component.Markup); + Assert.Contains("disabled", component.Markup); + } + + [Fact] + public void FileInput_Renders_Accept() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Accept, "application/pdf"); + }); + + Assert.Contains("accept=\"application/pdf\"", component.Markup); + } + + [Fact] + public void FileInput_Renders_DefaultAccept() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(); + + Assert.Contains("accept=\"image/*\"", component.Markup); + } + + [Fact] + public void FileInput_Renders_FileInputElement() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(); + + Assert.Contains("type=\"file\"", component.Markup); + } + + [Fact] + public void FileInput_Renders_Title_WhenSet() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Title, "MyDocument.pdf"); + parameters.Add(p => p.Value, "data:application/pdf;base64,test"); + }); + + Assert.Contains("MyDocument.pdf", component.Markup); + } + + [Fact] + public void FileInput_Renders_FileName_WhenTitleNotSet() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.FileName, "document.pdf"); + parameters.Add(p => p.Value, "data:application/pdf;base64,test"); + }); + + Assert.Contains("document.pdf", component.Markup); + } + + [Fact] + public void FileInput_Renders_DeleteButton_WhenValueSet() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Value, "data:text/plain;base64,test"); + }); + + Assert.Contains("rz-icon-trash", component.Markup); + } + + [Fact] + public void FileInput_Renders_CustomDeleteText() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.DeleteText, "Remove File"); + parameters.Add(p => p.Value, "data:text/plain;base64,test"); + }); + + Assert.Contains("title=\"Remove File\"", component.Markup); + } + + [Fact] + public void FileInput_Renders_ImagePreview_ForImageFile() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Value, "data:image/png;base64,test"); + }); + + Assert.Contains(">(parameters => + { + parameters.Add(p => p.ImageAlternateText, "User Photo"); + parameters.Add(p => p.Value, "data:image/png;base64,test"); + }); + + Assert.Contains("alt=\"User Photo\"", component.Markup); + } + } +} + diff --git a/Radzen.Blazor.Tests/FormFieldTests.cs b/Radzen.Blazor.Tests/FormFieldTests.cs new file mode 100644 index 000000000..ed160d314 --- /dev/null +++ b/Radzen.Blazor.Tests/FormFieldTests.cs @@ -0,0 +1,163 @@ +using Bunit; +using Xunit; + +namespace Radzen.Blazor.Tests +{ + public class FormFieldTests + { + [Fact] + public void FormField_Renders_WithClassName() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent(); + + Assert.Contains(@"rz-form-field", component.Markup); + } + + [Fact] + public void FormField_Renders_Text() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent(parameters => + { + parameters.Add(p => p.Text, "Email Address"); + }); + + Assert.Contains("Email Address", component.Markup); + Assert.Contains("rz-form-field-label", component.Markup); + } + + [Fact] + public void FormField_Renders_Variant_Outlined() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent(parameters => + { + parameters.Add(p => p.Variant, Variant.Outlined); + }); + + Assert.Contains("rz-variant-outlined", component.Markup); + } + + [Fact] + public void FormField_Renders_Variant_Filled() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent(parameters => + { + parameters.Add(p => p.Variant, Variant.Filled); + }); + + Assert.Contains("rz-variant-filled", component.Markup); + } + + [Fact] + public void FormField_Renders_Variant_Flat() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent(parameters => + { + parameters.Add(p => p.Variant, Variant.Flat); + }); + + Assert.Contains("rz-variant-flat", component.Markup); + } + + [Fact] + public void FormField_Renders_Variant_Text() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent(parameters => + { + parameters.Add(p => p.Variant, Variant.Text); + }); + + Assert.Contains("rz-variant-text", component.Markup); + } + + [Fact] + public void FormField_Renders_AllowFloatingLabel_True() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent(parameters => + { + parameters.Add(p => p.AllowFloatingLabel, true); + }); + + Assert.Contains("rz-floating-label", component.Markup); + } + + [Fact] + public void FormField_Renders_AllowFloatingLabel_False() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent(parameters => + { + parameters.Add(p => p.AllowFloatingLabel, false); + }); + + Assert.DoesNotContain("rz-floating-label", component.Markup); + } + + [Fact] + public void FormField_Renders_Component_Attribute() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent(parameters => + { + parameters.Add(p => p.Component, "email-input"); + }); + + Assert.Contains("for=\"email-input\"", component.Markup); + } + + [Fact] + public void FormField_Renders_Helper() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent(parameters => + { + parameters.Add(p => p.Helper, builder => builder.AddContent(0, "Enter your email address")); + }); + + Assert.Contains("rz-form-field-helper", component.Markup); + Assert.Contains("Enter your email address", component.Markup); + } + + [Fact] + public void FormField_Renders_Start() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent(parameters => + { + parameters.Add(p => p.Start, builder => builder.AddMarkupContent(0, "Start")); + }); + + Assert.Contains("rz-form-field-start", component.Markup); + Assert.Contains("Start", component.Markup); + } + + [Fact] + public void FormField_Renders_End() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent(parameters => + { + parameters.Add(p => p.End, builder => builder.AddMarkupContent(0, "End")); + }); + + Assert.Contains("rz-form-field-end", component.Markup); + Assert.Contains("End", component.Markup); + } + + [Fact] + public void FormField_Renders_FormFieldContent() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent(); + + Assert.Contains("rz-form-field-content", component.Markup); + } + } +} + diff --git a/Radzen.Blazor.Tests/PickListTests.cs b/Radzen.Blazor.Tests/PickListTests.cs new file mode 100644 index 000000000..7eb0fbd2b --- /dev/null +++ b/Radzen.Blazor.Tests/PickListTests.cs @@ -0,0 +1,161 @@ +using Bunit; +using Xunit; +using System.Collections.Generic; + +namespace Radzen.Blazor.Tests +{ + public class PickListTests + { + class Item + { + public int Id { get; set; } + public string Name { get; set; } + } + + [Fact] + public void PickList_Renders_WithClassName() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(); + + Assert.Contains(@"rz-picklist", component.Markup); + } + + [Fact] + public void PickList_Renders_SourceAndTargetLists() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(); + + Assert.Contains("rz-picklist-source-wrapper", component.Markup); + Assert.Contains("rz-picklist-target-wrapper", component.Markup); + } + + [Fact] + public void PickList_Renders_TransferButtons() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(); + + Assert.Contains("rz-picklist-buttons", component.Markup); + } + + [Fact] + public void PickList_Renders_Orientation_Horizontal() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Orientation, Orientation.Horizontal); + }); + + Assert.Contains("rz-flex-row", component.Markup); + } + + [Fact] + public void PickList_Renders_Orientation_Vertical() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Orientation, Orientation.Vertical); + }); + + Assert.Contains("rz-flex-column", component.Markup); + } + + [Fact] + public void PickList_Renders_AllowFiltering() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var data = new List + { + new Item { Id = 1, Name = "Item 1" } + }; + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.AllowFiltering, true); + parameters.Add(p => p.Source, data); + parameters.Add(p => p.TextProperty, "Name"); + }); + + Assert.Contains("rz-listbox-filter", component.Markup); + } + + [Fact] + public void PickList_Renders_SourceData() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var data = new List + { + new Item { Id = 1, Name = "Source Item 1" }, + new Item { Id = 2, Name = "Source Item 2" } + }; + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Source, data); + parameters.Add(p => p.TextProperty, "Name"); + }); + + Assert.Contains("Source Item 1", component.Markup); + Assert.Contains("Source Item 2", component.Markup); + } + + [Fact] + public void PickList_Renders_ShowHeader() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.ShowHeader, true); + parameters.Add(p => p.SourceHeader, builder => builder.AddContent(0, "Available Items")); + parameters.Add(p => p.TargetHeader, builder => builder.AddContent(0, "Selected Items")); + }); + + Assert.Contains("Available Items", component.Markup); + Assert.Contains("Selected Items", component.Markup); + } + + [Fact] + public void PickList_Renders_AllowMoveAll_Buttons() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var data = new List { new Item { Id = 1, Name = "Item" } }; + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.AllowMoveAll, true); + parameters.Add(p => p.Source, data); + }); + + // Should have 4 buttons when AllowMoveAll is true + var buttonCount = System.Text.RegularExpressions.Regex.Matches(component.Markup, "rz-button").Count; + Assert.True(buttonCount >= 4); + } + + [Fact] + public void PickList_Renders_Disabled() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Disabled, true); + }); + + Assert.Contains("disabled", component.Markup); + } + } +} + diff --git a/Radzen.Blazor.Tests/ProgressBarTests.cs b/Radzen.Blazor.Tests/ProgressBarTests.cs index cbcdf9ab1..91d18f46b 100644 --- a/Radzen.Blazor.Tests/ProgressBarTests.cs +++ b/Radzen.Blazor.Tests/ProgressBarTests.cs @@ -142,5 +142,45 @@ namespace Radzen.Blazor.Tests component.SetParametersAndRender(parameters => parameters.Add(p => p.Mode, ProgressBarMode.Indeterminate)); Assert.Contains(@$"rz-progressbar-info", component.Markup); } + + [Fact] + public void ProgressBar_Renders_ShowValue_True() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent(parameters => + { + parameters.Add(p => p.ShowValue, true); + parameters.Add(p => p.Value, 50); + }); + + Assert.Contains("rz-progressbar-label", component.Markup); + Assert.Contains("50%", component.Markup); + } + + [Fact] + public void ProgressBar_Renders_ShowValue_False() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent(parameters => + { + parameters.Add(p => p.ShowValue, false); + parameters.Add(p => p.Value, 50); + }); + + Assert.DoesNotContain("rz-progressbar-label", component.Markup); + } + + [Fact] + public void ProgressBar_Renders_Template() + { + using var ctx = new TestContext(); + var component = ctx.RenderComponent(parameters => + { + parameters.Add(p => p.Value, 75); + parameters.Add(p => p.Template, builder => builder.AddContent(0, "Custom: 75%")); + }); + + Assert.Contains("Custom: 75%", component.Markup); + } } } diff --git a/Radzen.Blazor.Tests/SliderTests.cs b/Radzen.Blazor.Tests/SliderTests.cs index 55dddde8f..11dff1789 100644 --- a/Radzen.Blazor.Tests/SliderTests.cs +++ b/Radzen.Blazor.Tests/SliderTests.cs @@ -89,5 +89,71 @@ namespace Radzen.Blazor.Tests Assert.Contains(@$"autofocus", component.Markup); } + + [Fact] + public void Slider_Renders_Orientation_Vertical() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + ctx.JSInterop.SetupModule("_content/Radzen.Blazor/Radzen.Blazor.js"); + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Orientation, Orientation.Vertical); + }); + + Assert.Contains("rz-slider-vertical", component.Markup); + } + + [Fact] + public void Slider_Renders_Disabled() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + ctx.JSInterop.SetupModule("_content/Radzen.Blazor/Radzen.Blazor.js"); + + var component = ctx.RenderComponent>(parameters => + { + parameters.Add(p => p.Disabled, true); + }); + + Assert.Contains("rz-state-disabled", component.Markup); + } + + [Fact] + public void Slider_Renders_SliderHandle() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + ctx.JSInterop.SetupModule("_content/Radzen.Blazor/Radzen.Blazor.js"); + + var component = ctx.RenderComponent>(); + + Assert.Contains("rz-slider-handle", component.Markup); + } + + [Fact] + public void Slider_Renders_SliderRange() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + ctx.JSInterop.SetupModule("_content/Radzen.Blazor/Radzen.Blazor.js"); + + var component = ctx.RenderComponent>(); + + Assert.Contains("rz-slider-range", component.Markup); + } + + [Fact] + public void Slider_Renders_TabIndex() + { + using var ctx = new TestContext(); + ctx.JSInterop.Mode = JSRuntimeMode.Loose; + ctx.JSInterop.SetupModule("_content/Radzen.Blazor/Radzen.Blazor.js"); + + var component = ctx.RenderComponent>(); + + Assert.Contains("tabindex=\"0\"", component.Markup); + } } }