diff --git a/DeathSocket/DeathSocket.fsproj b/DeathSocket/DeathSocket.fsproj index a21b9e6..5d47875 100644 --- a/DeathSocket/DeathSocket.fsproj +++ b/DeathSocket/DeathSocket.fsproj @@ -19,6 +19,7 @@ 1.0.0.0 https://gitlab.com/CraigOates/Death-Socket/blob/master/.github/Images/death-socket-logo.png 1.0.0.0 + true diff --git a/TestCentre/Script.fsx b/TestCentre/Script.fsx index 5bd6ce6..f4b0999 100644 --- a/TestCentre/Script.fsx +++ b/TestCentre/Script.fsx @@ -1,113 +1,116 @@ -//// These DLL's must be built before you can use them in this script. -//#r "bin/Debug/System.Drawing.Common.dll" -//#r "bin/Debug/SmoulderingBeachBall.dll" - -//open System -//open System.Drawing -//open System.Reflection -//open SmoulderingBeachBall.Domain -//open SmoulderingBeachBall.Services -//open System.Threading -//open System.IO - -//let loadLocation = __SOURCE_DIRECTORY__ + "/LoadingTestArea" -//let saveLocation = __SOURCE_DIRECTORY__ + "/SavingTestArea" -//let random = Random() - -//(* Resetting the Testing Area Folders Scripts -//=============================================================================== -//The following scripts are for when you need to "manually" clear out the -//LoadingTestArea and SavingTestArea folders. If you do not want to open up the -//folder in Explorer and delete the files that way, just run the scripts in this -//section. If you reset the LoadingTestArea, you will need to repopulate it using -//the "Populating LoadingTestArea Folder Scripts" below. *) - -//let resetSavingTestArea () = -// let files = Directory.GetFileSystemEntries(saveLocation, "*.png") -// match files.Length with -// | 0 -> () -// | _ -> -// files -// |> Array.iter (fun f -> File.Delete(f)) - -//let resetLoadingTestArea () = -// let files = Directory.GetFileSystemEntries(loadLocation, "*.png") -// match files.Length with -// | 0 -> () -// | _ -> -// files -// |> Array.iter (fun f -> File.Delete(f)) - -//// Run these when the above functions have been added to F# interactive. -//resetSavingTestArea () -//resetLoadingTestArea () - -//(* Populating LoadingTestArea Folder Scripts -//=============================================================================== -//The following scripts are to help you populate a test folder with test images. -//You can then use these images in LibraryTests.fs -- Property Tests. -//The tests consists of loading images from LoadingTestArea, transforming them -//and saving them in SavingTestArea. *) - -//let allColours = -// let properties = -// typeof.GetProperties(BindingFlags.Public ||| BindingFlags.Static) -// seq { for prop in properties -> prop} -// |> Seq.toArray - -//let randomBrush () = -// let item = allColours.[random.Next(allColours.Length)] -// item.GetValue(null, null) - -//let generateDimensionSizes total = -// List.init total (fun _ -> random.Next(3000)) - -//let randomSize (sizes: int list) = -// // (Sleep) Helps to reduce chance of picking the same item twice in quick succession. -// Thread.Sleep 100 -// sizes.Item (random.Next(sizes.Length)) - -//let populateSpec sizes = -// Brush ({ filePath = loadLocation -// height = randomSize (sizes) -// colour = (randomBrush ()) :?> Brush -// overlay = None }) - -//let generateSpecs amount = -// let imageSizes = generateDimensionSizes amount -// [for i in 0 .. amount -> (populateSpec (imageSizes)) ] - -//let generateImage spec = -// printfn "[INFO.] Creating image [Width: %i] [Height: %i] ..." (spec.width) (spec.height) -// makeImage spec - -//let populateLoadingTestArea () = -// printfn "[INFO.] Populating LoadingTestArea..." -// generateSpecs 100 -// |> List.map generateImage -// |> Async.Parallel -// |> Async.RunSynchronously -// |> ignore -// printfn "[INFO.] Finishing populating /LoadingTestArea." - -//// You should only need this once. -//// Make sure you have passed the above into F# Interactive. -//populateLoadingTestArea () - -//(* Creating the Saving Test Area Script -//============================================================================== -//This bit of code is for creating the SavingTestArea folder which Test Centre -//will use when it runs its tests. You will normally only need to run this code -//when you have just cloned this repository or you accidently deleted said -//folder. In other words, you should only need to use it once. *) - -//let createSavingTestArea () = -// match Directory.Exists saveLocation with -// | false -> -// Directory.CreateDirectory saveLocation |> ignore -// printfn "SavingTestArea created." -// | _ -> printfn "SavingTestArea already exists." - -//(* Before calling this function, make sure the test checking to see if this -//folder exists is failing first. *) -//createSavingTestArea () \ No newline at end of file +// These DLL's must be built before you can use them in this script. +#r "bin\Debug\System.Drawing.Common.dll" +#r @"..\packages\SmoulderingBeachBall.1.0.0\lib\netstandard2.0\SmoulderingBeachBall.dll" + +open System +open System.Drawing +open System.Reflection +open SmoulderingBeachBall.Domain +open SmoulderingBeachBall.Services +open System.Threading +open System.IO + +let loadLocation = __SOURCE_DIRECTORY__ + "/LoadingTestArea" +let saveLocation = __SOURCE_DIRECTORY__ + "/SavingTestArea" +let random = Random() + +(* Resetting the Testing Area Folders Scripts +=============================================================================== +The following scripts are for when you need to "manually" clear out the +LoadingTestArea and SavingTestArea folders. If you do not want to open up the +folder in Explorer and delete the files that way, just run the scripts in this +section. If you reset the LoadingTestArea, you will need to repopulate it using +the "Populating LoadingTestArea Folder Scripts" below. *) + +let resetSavingTestArea () = + let files = Directory.GetFileSystemEntries(saveLocation, "*.png") + match files.Length with + | 0 -> () + | _ -> + files + |> Array.iter (fun f -> File.Delete(f)) + +let resetLoadingTestArea () = + let files = Directory.GetFileSystemEntries(loadLocation, "*.png") + match files.Length with + | 0 -> () + | _ -> + files + |> Array.iter (fun f -> File.Delete(f)) + +// Run these when the above functions have been added to F# interactive. +resetSavingTestArea () +resetLoadingTestArea () + +(* Populating LoadingTestArea Folder Scripts +=============================================================================== +The following scripts are to help you populate a test folder with test images. +You can then use these images in LibraryTests.fs -- Property Tests. +The tests consists of loading images from LoadingTestArea, transforming them +and saving them in SavingTestArea. *) + +let allColours = + let properties = + typeof.GetProperties(BindingFlags.Public ||| BindingFlags.Static) + seq { for prop in properties -> prop} + |> Seq.toArray + +let randomBrush () = + let item = allColours.[random.Next(allColours.Length)] + item.GetValue(null, null) + +let generateDimensionSizes total = + List.init total (fun _ -> random.Next(3000)) + +let randomSize (sizes: int list) = + // (Sleep) Helps to reduce chance of picking the same item twice in quick succession. + Thread.Sleep 100 + sizes.Item (random.Next(sizes.Length)) + +let populateSpec sizes = + let spec: SmoulderingBeachBall.Domain.DomainTypes.ImageSpec = + { filePath = loadLocation + width = randomSize (sizes) + height = randomSize (sizes) + colour = (randomBrush ()) :?> Brush + overlay = None } + spec + +let generateSpecs amount = + let imageSizes = generateDimensionSizes amount + [for i in 0 .. amount -> (populateSpec (imageSizes)) ] + +let generateImage (spec: ImageSpec) = + printfn "[INFO.] Creating image [Width: %i] [Height: %i] ..." (spec.width) (spec.height) + makeImage spec + +let populateLoadingTestArea () = + printfn "[INFO.] Populating LoadingTestArea..." + generateSpecs 100 + |> List.map generateImage + |> Async.Parallel + |> Async.RunSynchronously + |> ignore + printfn "[INFO.] Finishing populating /LoadingTestArea." + +// You should only need this once. +// Make sure you have passed the above into F# Interactive. +populateLoadingTestArea () + +(* Creating the Saving Test Area Script +============================================================================== +This bit of code is for creating the SavingTestArea folder which Test Centre +will use when it runs its tests. You will normally only need to run this code +when you have just cloned this repository or you accidently deleted said +folder. In other words, you should only need to use it once. *) + +let createSavingTestArea () = + match Directory.Exists saveLocation with + | false -> + Directory.CreateDirectory saveLocation |> ignore + printfn "SavingTestArea created." + | _ -> printfn "SavingTestArea already exists." + +(* Before calling this function, make sure the test checking to see if this +folder exists is failing first. *) +createSavingTestArea () \ No newline at end of file