Browse Source

Inproved test harnes and engine and output

main
Steven 1 year ago
parent
commit
8f945525d0
  1. 154
      test.js

154
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("");

Loading…
Cancel
Save