diff --git a/SoftwareTests/SmokeTests.m b/SoftwareTests/SmokeTests.m index 47dfa1d..8867307 100644 --- a/SoftwareTests/SmokeTests.m +++ b/SoftwareTests/SmokeTests.m @@ -1,76 +1,72 @@ +% Run these tests with runMyTests +% All tests so far are on code expected to run without errors +% If/when we end up with a version that _should_ error, +% please add it to this set of examples classdef SmokeTests < matlab.unittest.TestCase - properties (ClassSetupParameter) - Project = {''}; + properties + rootProject + results end - properties (TestParameter) - Scripts; - end - - methods (TestParameterDefinition,Static) - function Scripts = GetScriptName(Project) - RootFolder = currentProject().RootFolder; - Scripts = dir(fullfile(RootFolder,"Scripts","*.mlx")); - Scripts = {Scripts.name}; - end + methods (TestClassSetup) - end - - methods (TestClassSetup) - - function SetUpSmokeTest(testCase,Project) + function setUpPath(testCase) + try - currentProject; - catch ME - warning("Project is not loaded.") + project = currentProject; + testCase.rootProject = project.RootFolder; + cd(testCase.rootProject) + catch + error("Load project prior to run tests") end - end - - - end - - - - methods(Test) - - function SmokeRun(testCase,Scripts) - Filename = string(Scripts); - switch (Filename) - otherwise - SimpleSmokeTest(testCase,Filename) - end - end - end + testCase.log("Running in " + version) + + end % function setUpPath + + function setUpResults(testCase) + files = dir(fullfile(testCase.rootProject,"Scripts","*.mlx")); + testCase.results = struct; + testCase.results.Name = strings(size(files)); + testCase.results.Passed = false(size(files)); + testCase.results.Time = zeros(size(files)); + testCase.results.Message = strings(size(files)); + for k = 1:length(files) + testCase.results.Name(k) = string(files(k).name); + end + end % function setUpResults - methods (Access = private) + end % methods (TestClassSetup) - function SimpleSmokeTest(testCase,Filename) + methods(Test) - % Run the Smoke test - RootFolder = currentProject().RootFolder; - cd(RootFolder) - disp(">> Running " + Filename); - try - run(fullfile("Scripts",Filename)); - catch ME - testCase.verifyTrue(false,ME.message); - end - - % Log the opened figures to the test reports - Figures = findall(groot,'Type','figure'); - Figures = flipud(Figures); - if ~isempty(Figures) - for f = 1:size(Figures,1) - FigDiag = matlab.unittest.diagnostics.FigureDiagnostic(Figures(f)); - log(testCase,1,FigDiag); + function smokeTest(testCase) + myFiles = testCase.results.Name; + fid = fopen(fullfile("SoftwareTests","TestResults_"+release_version+".txt"),"w"); + fprintf(fid,"Version,File,Status,ElapsedTime\n"); + for kTest = 1:length(myFiles) + try + disp("Running " + myFiles(kTest)) + tic + run(myFiles(kTest)) + testCase.results.Time(kTest) = toc; + disp("Finished " + myFiles(kTest)) + testCase.results.Passed(kTest) = true; + fprintf(fid,"%s,%s,%s,%s\n",release_version,myFiles(kTest),"passed",testCase.results.Time(kTest)); + catch ME + testCase.results.Time(kTest) = toc; + disp("Failed " + myFiles(kTest) + " because " + ... + newline + ME.message) + testCase.results.Message(kTest) = ME.message; + fprintf(fid,"%s,%s,%s,%s\n",release_version,myFiles(kTest),"failed",testCase.results.Time(kTest)); end + clearvars -except kTest testCase myFiles fid end - close all - + fclose(fid); + struct2table(testCase.results) end end @@ -84,4 +80,4 @@ function closeAllFigure(testCase) end % methods (TestClassTeardown) -end \ No newline at end of file +end