using UnitTestSharp; namespace Glass.UnitTests { public class RadioGroupTests : TestFixture { public class SelectTests : TestFixture { public void FirstSelectionSetsSelected() { var group = new RadioGroup(); var button = new RadioButton(); group.Select(button); CheckEqual(button, group.Selected); } public void SwitchingUnchecksThePreviousAndFiresItsOnCheckedChanged() { var group = new RadioGroup(); var first = new RadioButton { Group = group }; first.Checked = true; var second = new RadioButton(); bool? raisedWith = null; first.OnCheckedChanged +=value => raisedWith = value; group.Select(second); CheckFalse(first.Checked); CheckEqual(false, raisedWith); CheckEqual(second, group.Selected); } public void SelectingTheAlreadySelectedButtonIsANoOp() { var group = new RadioGroup(); var button = new RadioButton(); group.Select(button); int raiseCount = 0; group.OnSelectionChanged +=_ => ++raiseCount; group.Select(button); CheckEqual(0, raiseCount); } public void RaisesOnSelectionChangedWithTheNewlySelectedButton() { var group = new RadioGroup(); var button = new RadioButton(); RadioButton raisedWith = null; group.OnSelectionChanged +=selected => raisedWith = selected; group.Select(button); CheckEqual(button, raisedWith); } public void SelectingNullRaisesOnSelectionChangedWithNull() { var group = new RadioGroup(); var button = new RadioButton(); group.Select(button); RadioButton raisedWith = button; group.OnSelectionChanged +=selected => raisedWith = selected; group.Select(null); CheckNull(raisedWith); CheckNull(group.Selected); } } public class ForgetTests : TestFixture { public void ForgettingTheSelectedButtonClearsSelected() { var group = new RadioGroup(); var button = new RadioButton(); group.Select(button); group.Forget(button); CheckNull(group.Selected); } public void DoesNotChangeTheButtonsCheckedState() { var group = new RadioGroup(); var button = new RadioButton { Group = group, Checked = true }; group.Forget(button); Check(button.Checked); } public void RaisesOnSelectionChangedWithNull() { var group = new RadioGroup(); var button = new RadioButton(); group.Select(button); RadioButton raisedWith = button; group.OnSelectionChanged +=selected => raisedWith = selected; group.Forget(button); CheckNull(raisedWith); } public void ForgettingADifferentButtonIsANoOp() { var group = new RadioGroup(); var selected = new RadioButton(); var other = new RadioButton(); group.Select(selected); group.Forget(other); CheckEqual(selected, group.Selected); } public void ForgettingWithNothingSelectedIsANoOp() { var group = new RadioGroup(); var button = new RadioButton(); bool raised = false; group.OnSelectionChanged +=_ => raised = true; group.Forget(button); CheckFalse(raised); } } public class ClearTests : TestFixture { public void ReturnsToNoSelection() { var group = new RadioGroup(); var button = new RadioButton { Group = group }; button.Checked = true; group.Clear(); CheckNull(group.Selected); } public void UnchecksTheSelectedButton() { var group = new RadioGroup(); var button = new RadioButton { Group = group }; button.Checked = true; group.Clear(); CheckFalse(button.Checked); } public void WithNothingSelectedIsANoOp() { var group = new RadioGroup(); bool raised = false; group.OnSelectionChanged +=_ => raised = true; group.Clear(); CheckFalse(raised); } } public class FromChildrenOfTests : TestFixture { public void PointsEveryDirectRadioButtonChildAtAFreshGroup() { var parent = new Panel(); var first = new RadioButton(); var second = new RadioButton(); parent.CanvasChildren.Add(first); parent.CanvasChildren.Add(second); RadioGroup group = RadioGroup.FromChildrenOf(parent); CheckEqual(group, first.Group); CheckEqual(group, second.Group); } public void SkipsPlainCheckboxAndButtonChildren() { var parent = new Panel(); var checkbox = new Checkbox(); var button = new Button(); var radioButton = new RadioButton(); parent.CanvasChildren.Add(checkbox); parent.CanvasChildren.Add(button); parent.CanvasChildren.Add(radioButton); RadioGroup group = RadioGroup.FromChildrenOf(parent); CheckEqual(group, radioButton.Group); } public void DoesNotDescendIntoGrandchildren() { var parent = new Panel(); var child = new Panel(); var grandchild = new RadioButton(); child.CanvasChildren.Add(grandchild); parent.CanvasChildren.Add(child); RadioGroup.FromChildrenOf(parent); CheckNull(grandchild.Group); } public void HonorsAPreCheckedChild() { var parent = new Panel(); var button = new RadioButton { Checked = true }; parent.CanvasChildren.Add(button); RadioGroup group = RadioGroup.FromChildrenOf(parent); CheckEqual(button, group.Selected); } public void LastPreCheckedChildWins() { var parent = new Panel(); var first = new RadioButton { Checked = true }; var second = new RadioButton { Checked = true }; parent.CanvasChildren.Add(first); parent.CanvasChildren.Add(second); RadioGroup group = RadioGroup.FromChildrenOf(parent); CheckEqual(second, group.Selected); CheckFalse(first.Checked); } } } }