using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Foundations.UnitTests { public class ThreadsafeBoolTests : UnitTestSharp.TestFixture { public void BlankInitializationIsFalse() { var test = new ThreadsafeBool(); CheckFalse(test); } public void InitialValueIsSet_True() { var test = new ThreadsafeBool(true); CheckTrue(test); } public void InitialValueIsSet_False() { var test = new ThreadsafeBool(false); CheckFalse(test); } public void Set_SetsValue_True() { var test = new ThreadsafeBool(); test.Set(true); CheckTrue(test); } public void Set_SetsValue_False() { var test = new ThreadsafeBool(true); test.Set(false); CheckFalse(test); } public void Set_TriggersOnChangedWhenDifferent() { var test = new ThreadsafeBool(); bool? value = null; test.OnChanged += newValue => value = newValue; test.Set(true); CheckTrue(value.Value); } public void Set_DoesNotTriggerOnChangedWhenSame() { var test = new ThreadsafeBool(true); bool? value = null; test.OnChanged += newValue => value = newValue; test.Set(true); CheckNull(value); } public void Set_ReturnsOldValueWhenChanged() { var test = new ThreadsafeBool(); CheckFalse(test.Set(true)); } public void Set_ReturnsOldValueWhenNotChanged() { var test = new ThreadsafeBool(); CheckFalse(test.Set(false)); } public void PulseChangeEvent() { var test = new ThreadsafeBool(true); bool? value = null; test.OnChanged += newValue => value = newValue; test.PulseChangeEvent(); CheckTrue(value.Value); } public void Toggle_True() { var test = new ThreadsafeBool(); test.Toggle(); CheckTrue(test); } public void Toggle_False() { var test = new ThreadsafeBool(initialValue: true); test.Toggle(); CheckFalse(test); } public void Toggle_TriggersOnChanged_True() { var test = new ThreadsafeBool(); bool? value = null; test.OnChanged += newValue => value = newValue; test.Toggle(); CheckEqual(true, value); } public void Toggle_TriggersOnChanged_False() { var test = new ThreadsafeBool(initialValue: true); bool? value = null; test.OnChanged += newValue => value = newValue; test.Toggle(); CheckEqual(false, value); } public void Toggle_ReturnsOldValue_True() { var test = new ThreadsafeBool(initialValue: true); CheckTrue(test.Toggle()); } public void Toggle_ReturnsOldValue_False() { var test = new ThreadsafeBool(initialValue: false); CheckFalse(test.Toggle()); } public class PropertyChangedEventTests : UnitTestSharp.TestFixture { public void ToggleTriggersPropertyChanged() { var test = new ThreadsafeBool(initialValue: false); bool propertyChanged = false; test.PropertyChanged += (sender, args) => { propertyChanged = true; }; test.Toggle(); Check(propertyChanged); } public void SetTriggersPropertyChanged() { var test = new ThreadsafeBool(initialValue: false); bool propertyChanged = false; test.PropertyChanged += (sender, args) => { propertyChanged = true; }; test.Set(true); Check(propertyChanged); } public void SetDoesNotTriggersPropertyChangedIfNotChanged() { var test = new ThreadsafeBool(initialValue: false); bool propertyChanged = false; test.PropertyChanged += (sender, args) => { propertyChanged = true; }; test.Set(false); CheckFalse(propertyChanged); } public void PulseChangeEventTriggersPropertyChanged() { var test = new ThreadsafeBool(initialValue: false); bool propertyChanged = false; test.PropertyChanged += (sender, args) => { propertyChanged = true; }; test.PulseChangeEvent(); Check(propertyChanged); } } } }