namespace ConsoleTests module PropertyTests = open FsCheck.Xunit open Validation open System open SmoulderingBeachBall.Domain.DomainTypes open System.Drawing (* The functions without the "Property" attribute are not for testing. They generate the test data used in the (property) tests. Please be careful when removing any of these types of functions. They are the ones not marked with the "Property" attribute. Also, the intention is to keep these functions seperate from the tests. Until it is not practical to keep them in this module, the default place to keep them is above the tests. With that said, it is just a guide. Use your best judgement when adding new "helper" functions. This applies to the UnitTests module, thanks. *) let randomInt () = Random().Next() let randomColour () = colourList |> Map.toList |> List.item (Random().Next(colourList.Count)) let overlays = [|"none"; "n"; "full"; "f"|] let noOverlay () = overlays.[Random().Next(0, 1)] let fullOverlay () = overlays.[Random().Next(2, 3)] [] let ``buildDefaultSpec creates intended type`` () = let width = randomInt () let height = randomInt () let oSpec = { colour = Brushes.Black overlayType = Full } let defaultSpec = { width = width height = height colour = Brushes.AntiqueWhite filePath = getDesktopPath overlay = Some oSpec } let spec = buildDefaultSpec width height defaultSpec = spec [] let ``buildSpec creates intended type with no overlay`` () = let width = randomInt () let height = randomInt () let colour = randomColour () let overlay = noOverlay () let expectedSpec = { width = width height = height colour = snd colour filePath = getDesktopPath overlay = option.None } let spec = buildSpec width height (fst colour) (fst colour) overlay getDesktopPath expectedSpec = spec [] let ``buildSpec creates intended type with full overlay`` () = let width = randomInt () let height = randomInt () let mainColour = randomColour () let overlayColour = randomColour () let overlay = fullOverlay () let oSpec = { colour = snd overlayColour overlayType = Full } let expectedSpec = { width = width height = height colour = snd mainColour filePath = getDesktopPath overlay = Some oSpec } let spec = buildSpec width height (fst mainColour) (fst overlayColour) overlay getDesktopPath expectedSpec = spec module UnitTests = open Xunit open Validation open System [] let ``Colour map is not empty`` () = Assert.NotEmpty colourList [] let ``getDesktopPath returns desktop path`` () = let expectedPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) Assert.Equal (expectedPath, getDesktopPath)