From 1bfdd41c627316a43495758bc7dbbaaf3bb2d433 Mon Sep 17 00:00:00 2001 From: Joshua Marner Date: Mon, 13 Jun 2022 22:46:10 -0500 Subject: [PATCH] Add some tests for binding vm helpers --- src/Elmish.WPF.Tests/BindingVmHelpersTests.fs | 101 ++++++++++++++++++ src/Elmish.WPF.Tests/Elmish.WPF.Tests.fsproj | 1 + 2 files changed, 102 insertions(+) create mode 100644 src/Elmish.WPF.Tests/BindingVmHelpersTests.fs diff --git a/src/Elmish.WPF.Tests/BindingVmHelpersTests.fs b/src/Elmish.WPF.Tests/BindingVmHelpersTests.fs new file mode 100644 index 00000000..5c14a8d8 --- /dev/null +++ b/src/Elmish.WPF.Tests/BindingVmHelpersTests.fs @@ -0,0 +1,101 @@ +module BindingVmHelpersTests.M + +open System +open System.Collections.ObjectModel +open System.Collections.Specialized + +open Xunit +open Hedgehog +open Swensen.Unquote + +open Elmish.WPF +open Elmish.WPF.BindingVmHelpers + + + +module Initialize = + + let checker<'t when 't : equality> () = + Property.check <| property { + let! m1 = GenX.auto<'t> + + let binding = BindingData.OneWay.create id + + let vmBinding = + Initialize(LoggingViewModelArgs.none, "Nothing", (fun _ -> failwith "not selected item")) + .Recursive(m1, ignore, (fun () -> m1), binding) + + let result = + match vmBinding with + | Some (BaseVmBinding (OneWay b)) -> b + | b -> failwithf "Expected a OneWay binding, instead found %O" b + + test <@ result.OneWayData.Get m1 = m1 @> + } + + [] + let ``should initialize successfully with various types`` () = + checker () + checker () + checker () + checker () + checker () + +module Get = + + let checker<'t when 't : equality> () = + Property.check <| property { + let! m1 = GenX.auto<'t> + + let binding = BindingData.OneWay.create id + + let vmBinding = + Initialize(LoggingViewModelArgs.none, "Nothing", (fun _ -> failwith "not selected item")) + .Recursive(m1, ignore, (fun () -> m1), binding) + + let getResult = vmBinding |> Option.map (fun b -> Get("Nothing").Recursive(m1, b)) + + let get = + match getResult with + | Some (Ok x) -> x + | x -> failwithf "Expected a success, instead got %O" x + + test <@ get = m1 @> + } + + [] + let ``should get successfully with various types`` () = + checker () + checker () + checker () + checker () + checker () + +module Set = + + let checker<'t when 't : equality> () = + Property.check <| property { + let! m1 = GenX.auto<'t> + let! m2 = GenX.auto<'t> |> GenX.notEqualTo m1 + + let model = ref m1 + + let binding = BindingData.TwoWay.create id (fun m _ -> m) + + let vmBinding = + Initialize(LoggingViewModelArgs.none, "Nothing", (fun _ -> failwith "not selected item")) + .Recursive(m1, (fun m -> model.Value <- m), (fun () -> model.Value), binding) + + let _setResult = vmBinding |> Option.map (fun b -> Set(m2).Recursive(model.Value, b)) + + test <@ model.Value = m2 @> + test <@ model.Value <> m1 @> + } + + [] + let ``should set successfully with various types`` () = + checker () + checker () + checker () + checker () + checker () diff --git a/src/Elmish.WPF.Tests/Elmish.WPF.Tests.fsproj b/src/Elmish.WPF.Tests/Elmish.WPF.Tests.fsproj index f99365e4..b2fdc0a3 100644 --- a/src/Elmish.WPF.Tests/Elmish.WPF.Tests.fsproj +++ b/src/Elmish.WPF.Tests/Elmish.WPF.Tests.fsproj @@ -16,6 +16,7 @@ +