From 3d1c324068e206480714faa3bf3974abcf54ee53 Mon Sep 17 00:00:00 2001 From: "HOT-ROD\\craig" Date: Sat, 7 Jul 2018 13:54:38 +0100 Subject: [PATCH] Updated the property tests to generate new input on each new check. Some would call that a bug fix... Added new tests which check the content of the results. --- TestCentre/PropertyTests.fs | 76 ++++++++++++++++++++++++------------ TestCentre/UnitTests.fs | 53 ++++++++++++++++++++++++- WetPancake/DataServices.fs | 5 ++- WetPancake/SystemServices.fs | 1 - 4 files changed, 106 insertions(+), 29 deletions(-) diff --git a/TestCentre/PropertyTests.fs b/TestCentre/PropertyTests.fs index 32613e6..0e7ba6d 100644 --- a/TestCentre/PropertyTests.fs +++ b/TestCentre/PropertyTests.fs @@ -10,69 +10,97 @@ module ``Null Tests`` = [] - let ``Request Random Text does not return null when using the built-in random settings`` () = - let test = Pancake.RequestRandomTextAsync() + let ``Request Random Text does not return null when using the built-in random settings`` () = + let test = + Pancake.RequestRandomTextAsync () + |> Async.RunSynchronously let results = Assert.NotNull test Check.Quick results [] let ``Request Text does not return null when using fixed input parameters`` () = - let gibberishLevel = System.Random().Next(2, 10) - let totalSentences = System.Random().Next(2, 10) - let test = Pancake.RequestTextAsync gibberishLevel totalSentences + let gibberishLevel () = System.Random().Next(2, 10) + let totalSentences () = System.Random().Next(2, 10) + let test = + Pancake.RequestTextAsync (gibberishLevel()) (totalSentences()) + |> Async.RunSynchronously let results = Assert.NotNull test Check.Quick results [] let ``Request Text does not return null when using a random gibberish level`` () = - let gibberishLevel = System.Random().Next(2, 10) - let test = Pancake.RequestTextAsync gibberishLevel 10 + let gibberishLevel () = System.Random().Next(2, 10) + let test = + Pancake.RequestTextAsync (gibberishLevel()) 10 + |> Async.RunSynchronously let results = Assert.NotNull test Check.Quick results [] let ``Request Text does not return null when using a random sentence count`` () = - let totalSentences = System.Random().Next(2, 10) - let test () = Pancake.RequestTextAsync 5 totalSentences + let totalSentences () = System.Random().Next(2, 10) + let test () = + Pancake.RequestTextAsync 5 (totalSentences()) + |> Async.RunSynchronously let results () = Assert.NotNull test Check.Quick results [] let ``Using desktop-clock-info does not return null`` () = - let gibberishLevel = System.Random().Next(2, 10) - let totalSentences = System.Random().Next(2, 10) - let test = Pancake.RequestTextFromFileAsync gibberishLevel totalSentences DesktopClock + let gibberishLevel () = System.Random().Next(2, 10) + let totalSentences () = System.Random().Next(2, 10) + let test = + Pancake.RequestTextFromFileAsync (gibberishLevel()) (totalSentences()) DesktopClock + |> Async.RunSynchronously let results = Assert.NotNull test Check.Quick results [] let ``Using console-waterworks-announcement does not return null`` () = - let gibberishLevel = System.Random().Next(2, 10) - let totalSentences = System.Random().Next(2, 10) - let test = Pancake.RequestTextFromFileAsync gibberishLevel totalSentences ConsoleWaterworks + let gibberishLevel () = System.Random().Next(2, 10) + let totalSentences () = System.Random().Next(2, 10) + let test = + Pancake.RequestTextFromFileAsync (gibberishLevel()) (totalSentences()) ConsoleWaterworks + |> Async.RunSynchronously let results = Assert.NotNull test Check.Quick results [] let ``Using word-generator does not return null`` () = - let gibberishLevel = System.Random().Next(2, 10) - let totalSentences = System.Random().Next(2, 10) - let test = Pancake.RequestTextFromFileAsync gibberishLevel totalSentences WordGenerator + let gibberishLevel () = System.Random().Next(2, 10) + let totalSentences () = System.Random().Next(2, 10) + let test = + Pancake.RequestTextFromFileAsync (gibberishLevel()) (totalSentences()) WordGenerator + |> Async.RunSynchronously let results = Assert.NotNull test Check.Quick results [] let ``Using test-post does not return null`` () = - let gibberishLevel = System.Random().Next(2, 10) - let totalSentences = System.Random().Next(2, 10) - let test = Pancake.RequestTextFromFileAsync gibberishLevel totalSentences TestPost + let gibberishLevel () = System.Random().Next(2, 10) + let totalSentences () = System.Random().Next(2, 10) + let test = + Pancake.RequestTextFromFileAsync (gibberishLevel()) (totalSentences()) TestPost + |> Async.RunSynchronously let results = Assert.NotNull test Check.Quick results module ``Contents Test`` = [] - let ``RequestRandomText produces content with at least one full stop`` () = - let test = Pancake.RequestRandomTextAsync() |> Async.RunSynchronously - let results = Assert.Contains(".", test) + let ``RequestRandomText produces content which ends with a full stop`` () = + let test = + Pancake.RequestRandomTextAsync () + |> Async.RunSynchronously + let results = Assert.EndsWith(".", test) + Check.Quick results + + [] + let ``RequestTest produces content which ends with a full stop`` () = + let gibberishLevel () = System.Random().Next(2, 10) + let totalSentences () = System.Random().Next(2, 10) + let test = + Pancake.RequestTextAsync (gibberishLevel()) (totalSentences()) + |> Async.RunSynchronously + let results = Assert.EndsWith(".", test) Check.Quick results diff --git a/TestCentre/UnitTests.fs b/TestCentre/UnitTests.fs index 5f565f8..9ac2ddb 100644 --- a/TestCentre/UnitTests.fs +++ b/TestCentre/UnitTests.fs @@ -73,7 +73,56 @@ Assert.NotNull result module ``Contents Tests`` = + + [] + let ``RequestRandomText returns a string which contains a full stop`` () = + let result = + Pancake.RequestRandomTextAsync () + |> Async.RunSynchronously + Assert.Contains(".", result) + + [] + let ``RequestText returns a string which contains a full stop`` () = + let gibberishLevel = System.Random().Next(2, 20) + let totalSentences = System.Random().Next(2, 20) + let result = + Pancake.RequestTextAsync gibberishLevel totalSentences + |> Async.RunSynchronously + Assert.Contains(".", result) + + [] + let ``RequestTextFromFile returns a string which contains a full stop when using desktop-clock-info`` () = + let gibberishLevel = System.Random().Next(2, 20) + let totalSentences = System.Random().Next(2, 20) + let result = + Pancake.RequestTextFromFileAsync gibberishLevel totalSentences DesktopClock + |> Async.RunSynchronously + Assert.Contains(".", result) + [] - let ``RequestRandomText returns a string which contains at least one full stop`` () = - let result = Pancake.RequestRandomTextAsync () |> Async.RunSynchronously + let ``RequestTextFromFile returns a string which contains a full stop when using console-waterworks-announcement`` () = + let gibberishLevel = System.Random().Next(2, 20) + let totalSentences = System.Random().Next(2, 20) + let result = + Pancake.RequestTextFromFileAsync gibberishLevel totalSentences ConsoleWaterworks + |> Async.RunSynchronously + Assert.Contains(".", result) + + [] + let ``RequestTextFromFile returns a string which contains a full stop when using word-generator`` () = + let gibberishLevel = System.Random().Next(2, 20) + let totalSentences = System.Random().Next(2, 20) + let result = + Pancake.RequestTextFromFileAsync gibberishLevel totalSentences WordGenerator + |> Async.RunSynchronously + Assert.Contains(".", result) + + + [] + let ``RequestTextFromFile returns a string which contains a full stop using test-post`` () = + let gibberishLevel = System.Random().Next(2, 20) + let totalSentences = System.Random().Next(2, 20) + let result = + Pancake.RequestTextFromFileAsync gibberishLevel totalSentences TestPost + |> Async.RunSynchronously Assert.Contains(".", result) \ No newline at end of file diff --git a/WetPancake/DataServices.fs b/WetPancake/DataServices.fs index 0f01636..fc88e0f 100644 --- a/WetPancake/DataServices.fs +++ b/WetPancake/DataServices.fs @@ -5,6 +5,7 @@ open DataProcessing open DataCleaning open System.Threading + open System let rec GenerateMarkovChain (map: Map) (state:string) chain = if map.ContainsKey state then @@ -18,8 +19,8 @@ |> ConcatToString GenerateMarkovChain map (CombineWords currentWords nextChoice) (nextChoice :: chain) else - let fallbackChoice = (PickRandomItem map).Key - fallbackChoice + "." :: chain + let fallbackChoice = (PickRandomItem map).Key + String.Format("{0}.", fallbackChoice) :: chain let GenerateMarkovSentence map start = GenerateMarkovChain map start [start] diff --git a/WetPancake/SystemServices.fs b/WetPancake/SystemServices.fs index 1142a53..d9100a1 100644 --- a/WetPancake/SystemServices.fs +++ b/WetPancake/SystemServices.fs @@ -1,7 +1,6 @@ module internal SystemServices open System - open System.Collections.Generic let PickRandomNumber min max = Random().Next(min, max)