The purpose of this repository is to provide a way for people to create placeholder images quickly. https://www.craigoates.net/Software/project/11
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
4.4 KiB

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"; "b"; "border"; "full"; "f"|]
let noOverlay () = overlays.[Random().Next(0, 1)]
let borderOverlay () = overlays.[Random().Next(2, 3)]
let fullOverlay () = overlays.[Random().Next(4, 5)]
[<Property>]
let ``Can create an intended default image spec`` () =
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
[<Property>]
let ``Can create an image spec with border`` () =
let width = randomInt ()
let height = randomInt ()
let mainColour = randomColour ()
let overlayColour = randomColour ()
let overlay = borderOverlay ()
let oSpec =
{ colour = (snd) overlayColour
overlayType = Border }
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
[<Property>]
let ``Can create an image spec 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
[<Property>]
let ``Can create an image spec 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
module UnitTests =
open Xunit
open Validation
open System
[<Fact>]
let ``Colour map is not empty`` () =
Assert.NotEmpty colourList
[<Fact>]
let ``Can retrieve the path to users desktop`` () =
let expectedPath =
Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)
Assert.Equal (expectedPath, getDesktopPath)