From 8f945525d0c085e4df7a0e412549bfa01308ed6a Mon Sep 17 00:00:00 2001 From: Steven Date: Tue, 5 Dec 2023 16:57:43 -0800 Subject: [PATCH] Inproved test harnes and engine and output --- test.js | 154 ++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 140 insertions(+), 14 deletions(-) diff --git a/test.js b/test.js index a773dbc..f2f13ff 100644 --- a/test.js +++ b/test.js @@ -1,3 +1,4 @@ +//Setup some enum's const Presidence = Object.freeze({ General: "general", Row: "row", @@ -24,6 +25,17 @@ const Capsource = Object.freeze({ General: "general" }) +const TestResult = Object.freeze({ + Pass: "Pass", + Fail: "Fail" +}) + +//Declare some readability constants +const ShouldApplyCap = true; +const GeneralCapIsEnabled = true; +const RowCapIsEnabled = true; + + function newResult(shouldApplyCap, reasonNum, trueCap, capSource, myBidNum) { let result = {}; result.shouldApplyCap = shouldApplyCap; @@ -32,8 +44,13 @@ function newResult(shouldApplyCap, reasonNum, trueCap, capSource, myBidNum) { result.capSource = capSource; result.myBid = myBidNum; return result; -} +} +function getBidCapReasonForScenario(scenario) { + return getBidCapReason(scenario[0], scenario[1], scenario[2], scenario[3], scenario[4], scenario[5], scenario[6], scenario[7], scenario[8]); +} + +//The function from our main codebase function getBidCapReason(generalCapIsEnabled, generalCap, capPresidence, applyPresidenceTo, oversightAction, rowCapIsEnabled, rowCap, tieBid, myBid) { let tieBidNum = Number(tieBid); let winBidNum = Number(tieBid) + 25; @@ -142,22 +159,131 @@ function getBidCapReason(generalCapIsEnabled, generalCap, capPresidence, applyPr return results; } -function Assert(testName, assertion) { - const output = (assertion == true) ? "Pass" : "Fail"; - console.log("Test "+ testName + "\t"+ output); +//Stuff to Testing the actual functionality +function Assert(testName, thingsToCheck) { + let allChecksPassed = true; + let testCount = thingsToCheck.length; + let testResults = []; + for(let i = 0; i < testCount; i++ ){ + let result = (thingsToCheck[i] == true); + testResults.push(result); + if(!result) { + allChecksPassed = false; + } + } + let output = {}; + output.testName = testName; + output.result = (allChecksPassed == true) ? TestResult.Pass: TestResult.Fail; + output.individualResults = testResults; return output; } -const expected1 = {}; -const ShouldApplyCap = true; -const GeneralCapIsEnabled = true; -const RowCapIsEnabled = true; +//All the scenarios we could run into +function getScenarios(){ + let useCases = []; //[generalCapIsEnabled, generalCap, capPresidence, applyPresidenceTo, oversightAction, rowCapIsEnabled, rowCap, tieBid, myBid]; + useCases[0] = [GeneralCapIsEnabled, 300, Presidence.General, AppliesTo.All, Oversight.Win, !RowCapIsEnabled, null, 500, 350]; + useCases[1] = [GeneralCapIsEnabled, 300, Presidence.General, AppliesTo.All, Oversight.Win, RowCapIsEnabled, 450 , 500, 350]; + useCases[2] = [GeneralCapIsEnabled, 300, Presidence.General, AppliesTo.All, Oversight.Tie, !RowCapIsEnabled, null, 500, 350]; + useCases[3] = [GeneralCapIsEnabled, 300, Presidence.General, AppliesTo.All, Oversight.Tie, RowCapIsEnabled, 450 , 500, 350]; + return useCases; +} + +//And what we expect from each scenario +function getExpectations(){ + let expectedOutcomes = []; //[shouldApplyCap, reason, trueCap, capSource, myBid]); + expectedOutcomes[0] = [GeneralCapIsEnabled, 1, 300, Capsource.General, 300]; + expectedOutcomes[1] = [GeneralCapIsEnabled, 1, 300, Capsource.General, 300]; + expectedOutcomes[2] = [GeneralCapIsEnabled, 3, 300, Capsource.General, 300]; + expectedOutcomes[3] = [GeneralCapIsEnabled, 4, 300, Capsource.General, 300]; + return expectedOutcomes; +} + +function getTest(testId) { + //TODO: THIS CODE IS AN IDEA AND IS NOT USED YET + let assertion = {}; + assertion.id = testId; + assertion.given = useCases[testId]; + assertion.expect = expectedCoutomes[testId]; +} + +//Setup our scenarios and expected values +let scenarios = getScenarios(); +let expectations = getExpectations(); +let verboseLevel = 1; + +/////////////////////////////////////////////////////////////////////////////// +//Run thru the scenarios +const scenariosCount = scenarios.length; +console.log("VerboseLevel: "+ verboseLevel); +console.log("Generating Scenarios... \t[generalCapIsEnabled, generalCap, capPresidence, applyPresidenceTo, oversightAction, rowCapIsEnabled, rowCap, tieBid, myBid]"); +console.log("Generating ExpectedValues...\t[shouldApplyCap, reason, trueCap, capSource, myBid]"); +if(verboseLevel >= 2) { console.log("Test \tScenarioValues -> ExpectedValues"); } +console.log("--------------------------------------------------------"); +let scenarioReasons = []; +for(let i = 0; i < scenariosCount; i++ ){ + if(verboseLevel >= 2) { console.log(i+"\t["+ scenarios[i]+"] -> "+ "["+expectations[i]+"]");} + let reason = getBidCapReasonForScenario(scenarios[i]); + scenarioReasons.push(reason); +} +//////////////////////////////////////////////////////////////////////////////// +//Do the actual assertions/tests to confirm we got the results we were expecting +const reasonsCount = scenarioReasons.length; +console.log(""); +console.log("Running tests on each scenario..."); +if(verboseLevel >= 1){ + console.log("Test\tOutome\t||apply\t|reason\t|truCap\t|capSrc\t|myBid\t|| ScenarioValues -> ExpectedValues"); +} else { + console.log("Test\tOutome\t|| ScenarioValues -> ExpectedValues"); +} +console.log("-----------------------------------------------------------------"); +let allTestsPassed = true; +let failCount = 0; +for(let i = 0; i < reasonsCount; i++ ){ + //console.log(JSON.stringify(scenarioReasons[i])); + let assertions = [ + (scenarioReasons[i].shouldApplyCap == expectations[i][0]), + (scenarioReasons[i].reason == expectations[i][1]), + (scenarioReasons[i].trueCap == expectations[i][2]), + (scenarioReasons[i].capSource == expectations[i][3]), + (scenarioReasons[i].myBid == expectations[i][4]) + ]; + let testResult = Assert(i, assertions); + if(verboseLevel >= 1){ + let individualResults = testResult.individualResults.toString().replaceAll(",","\t| "); + console.log(testResult.testName + "\t"+ testResult.result + "\t||"+ individualResults +"\t|| ["+scenarios[i]+"]\t-> ["+ expectations[i] +"]"); + } else { + console.log(testResult.testName + "\t"+ testResult.result + "\t|| ["+scenarios[i]+"]\t-> ["+ expectations[i] +"]"); + } -// generalCapIsEnabled , generalCap , capPresidence , applyPresidenceTo , oversightAction , rowCapIsEnabled , rowCap , tieBid , myBid -const results1 = getBidCapReason( GeneralCapIsEnabled , 300 , Presidence.General , AppliesTo.All , Oversight.Win , !RowCapIsEnabled , null , 500 , 300 ); -const results2 = getBidCapReason( GeneralCapIsEnabled , 300 , Presidence.General , AppliesTo.All , Oversight.Win , RowCapIsEnabled , 450 , 500 , 300 ); -const results3 = getBidCapReason( GeneralCapIsEnabled , 300 , Presidence.General , AppliesTo.All , Oversight.Tie , !RowCapIsEnabled , null , 500 , 300 ); + if(verboseLevel >= 2) { + const ePad =" \t |"; + const TestResult_ShouldApplyCap = (assertions[0] == true)? TestResult.Pass : TestResult.Fail; + const TestResult_Reason = (assertions[1] == true)? TestResult.Pass : TestResult.Fail; + const TestResult_TrueCap = (assertions[2] == true)? TestResult.Pass : TestResult.Fail; + const TestResult_CapSource = (assertions[3] == true)? TestResult.Pass : TestResult.Fail; + const TestResult_MyBid = (assertions[4] == true)? TestResult.Pass : TestResult.Fail; + console.log(" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); + console.log(ePad +" ITEM RESULT \t| ACTUAL \t| EXPECTED"); + console.log(" +---------------------------------------------------"); + console.log(ePad +"shouldApplyCap: "+ TestResult_ShouldApplyCap +" \t| "+ scenarioReasons[i].shouldApplyCap +" \t| "+ expectations[i][0]); + console.log(ePad +"reason: "+ TestResult_Reason +"\t| "+ scenarioReasons[i].reason +" \t| "+ expectations[i][1]); + console.log(ePad +"trueCap: "+ TestResult_TrueCap +"\t| "+ scenarioReasons[i].trueCap +" \t| "+ expectations[i][2]); + console.log(ePad +"capSource: "+ TestResult_CapSource+"\t| "+ scenarioReasons[i].capSource +"\t| "+ expectations[i][3]); + console.log(ePad +"myBid: "+ TestResult_MyBid +"\t| "+ scenarioReasons[i].myBid +" \t| "+ expectations[i][4]); + console.log(" +---------------------------------------------------"); + console.log("---------------------------------------------------------------------"); + } -console.log(JSON.stringify(results1)); -Assert(1,(results1.shouldApplyCap == true && results1.reason == 1 && results1.trueCap == 200 && results1.capSource == Capsource.General && mybid == 300)); + if(testResult.result != TestResult.Pass){ + allTestsPassed = false; + failCount++; + } +} +console.log("====================================================================="); +if(allTestsPassed){ + console.log("All "+reasonsCount +" tests passed"); +} else { + console.log(failCount+"/"+reasonsCount+" tests failed"); +} +console.log("");